【面试题总结】1、统计字符串中某个单词出现的次数(1-C++实现)
【解决方法一】C++ map解决
一、map中的find函数:
用于查找map中是否包含某个关键字条目,传入的参数是要查找的key,最后返回一个迭代器,如果没有找到,则返回的迭代器等于end()返回的迭代器。示例代码:
#include<iostream>
#include<string>
#include<map>
using namespace std; int main() {
map<int, string> mapStudent; mapStudent.insert(pair<int, string>(, "student_one"));
mapStudent.insert(pair<int, string>(, "student_two"));
mapStudent.insert(pair<int, string>(, "student_three")); map<int, string>::iterator iter;
iter = mapStudent.find();
if (iter != mapStudent.end())
cout << "Find,the value is: " << iter->second << endl;
system("pause");
return ;
}
运行结果:

二、map的插入方法:
插入的方法有好几种,下面介绍:map.insert(pair<type1,type2>(key,value))这种,还有一种是map[key] = value,前者出现重复不会发生改变,后者出现重复则会发生覆盖,后者如果没有给value值,直接使用map[key],则其value值默认为0。示例代码:
#include<iostream>
#include<string>
#include<map>
using namespace std; int main() { map<int, string> mapStudent;
mapStudent.insert(pair<int, string>(, "student_one"));
mapStudent.insert(pair<int, string>(, "student_two"));
mapStudent.insert(pair<int, string>(, "xxooxxooxxo"));//不起作用 map<int, string>::iterator iter;
for (iter = mapStudent.begin(); iter != mapStudent.end(); iter++) {
cout << iter->first << ' ' << iter->second << endl;
}
cout << endl;
mapStudent[] = "xxooxxooxxoo";//覆盖掉前面的value
for (iter = mapStudent.begin(); iter != mapStudent.end(); iter++) {
cout << iter->first << ' ' << iter->second << endl;
}
system("pause");
return ;
}
运行结果:

三、是否插入成功?
我们通过pair来获取是否插入成功,pair返回两个变量,第一个是map的迭代器,第二个是插入成功的标志,插入成功pair的第二个参数是true,插入失败,第二个参数为false。实例代码:
pair<map<type1,type2>::iterator,bool> ret;
ret = map_s.insert(pair<type1,type2>(key,value))
if(ret.second==ture)
cout<<"插入成功"<<endl;
else
cout<<"插入失败"<<endl;
四、统计字符出现个数:
思路1:先创建一个map,遍历字符串,逐个判断如果存在则count++,不存在则创建一个,让其value为1
思路2:通过插入失败来增加字符的个数,如果插入失败则表明map中存在该字符,count++即可
思路3:需要对map了解,直接使用库里提供的[]运算符重载。通过键值找节点,直接给给实值+1.
思路1:先创建一个map,遍历字符串,逐个判断如果存在则count++,不存在则创建一个,让其value为1。代码如下:
#include<iostream>
#include<string>
#include<map>
using namespace std; // 方法1:
int main()
{
map<char, int> map_s;
string str = "kkk ahguird-j l"; for (int i = ; i < str.length(); ++i)
{
map<char, int>::iterator iter = map_s.find(str[i]);
if (iter != map_s.end())
{
iter->second++;
}
else // 如果找不到就添加一个,找到了就count++
{
map_s.insert(pair<char, int>(str[i], )); // 如果测试用例为 "qwerqwer"时,前4次循环都是执行的这句else即insert插入操作
}
}
map<char, int>::iterator iter = map_s.begin(); for (; iter != map_s.end(); iter++)
{
cout << iter->first << ' ' << iter->second << endl;
}
cout << endl; system("pause");
return ;
}
运行结果:

思路2:通过插入失败来增加字符的个数,如果插入失败则表明map中存在该字符,count++即可。代码如下:
#include<iostream>
#include<string>
#include<map>
using namespace std; int main()
{
map<char, int> map_s;
string str = "kkk ahguird-j l"; pair<map<char, int>::iterator, bool> ret;
for (int i = ; i < str.length(); ++i)
{
ret = map_s.insert(pair<char, int>(str[i], ));
if (ret.second == false) // 如果插入失败,则该迭代器的第一个参数的value++
{
ret.first->second++;
}
}
map<char, int>::iterator iter = map_s.begin();
for (; iter != map_s.end(); iter++)
{
cout << iter->first << ' ' << iter->second << endl;
}
cout << endl; system("pause");
return ;
}
运行结果:

思路3:直接使用库里提供的[]运算符重载。通过键值找节点,直接给给实值+1.
#include<iostream>
#include<string>
#include<map>
using namespace std; int main() {
string str;
map<char, int> map_s;
while (cin >> str) {
for (int i = ; i < str.length(); ++i) {
map_s[str[i]]++;
}
map<char, int>::iterator iter;
for (iter = map_s.begin(); iter != map_s.end(); ++iter) {
cout << iter->first << ':' << iter->second << endl;
}
}
}
思路3是真的6阿~
参考连接:https://blog.csdn.net/qq_34312386/article/details/55281662
对思路3补充说明:假设一个map对象map_s中只存在一对pair<char,int>('a',1),现在执行map_s['b']则map_s中存在两对pair分别是('a',1),('b',0),是的,没错,'b'的value默认是0,那么如果刚才执行的不是map_s['b'],而是map_s['b']++,那么map_s中的两对pair为('a',1)和('b',1),理解为插入‘b’,然后value值++,所以,map_s['b']++这个语句的理解如下:
如果map_s中不存在key为‘b’的元素,那么在map_s中添加‘b’,value默认为0,然后map_s['b']++,value变成1.
如果map_s中存在key为 'b' 的元素,那么该语句表示map_s['b']的value++.
#include<iostream>
#include<map>
using namespace std; int main() {
map<char, int> m;
m.insert(pair<char, int>('a', ));
map<char, int>::iterator iter = m.begin();
cout << iter->first << ' '<<iter->second<<endl;
m['b'];
iter++;
cout << iter->first << ' ' << iter->second << endl;//value默认是0
m['b']++;
cout << iter->first << ' ' << iter->second << endl;//将value++
while ();
}
【面试题总结】1、统计字符串中某个单词出现的次数(1-C++实现)的更多相关文章
- Java基础知识强化之集合框架笔记61:Map集合之统计字符串中每个字符出现的次数的案例
1. 首先我们看看统计字符串中每个字符出现的次数的案例图解: 2. 代码实现: (1)需求 :"aababcabcdabcde",获取字符串中每一个字母出现的次数要求结果:a(5) ...
- 统计字符串中每个字符出现的次数(Python)
#统计字符串中每个字符出现的次数 以The quick brown fox jumps over the lazy dog为例 message='The quick brown fox jumps o ...
- HashMap 统计一个字符串中每个单词出现的次数
HashMap 统计一个字符串中每个单词出现的次数 import java.util.HashMap; import java.util.Map; public class Test { public ...
- 使用Map,统计字符串中每个字符出现的次数
package seday13; import java.util.HashMap; import java.util.Map; /** * @author xingsir * 统计字符串中每个字符出 ...
- python统计文本中每个单词出现的次数
.python统计文本中每个单词出现的次数: #coding=utf-8 __author__ = 'zcg' import collections import os with open('abc. ...
- 【面试题总结】1、统计字符串中某个字符出现的次数(2-Python实现)
1.可以使用Python的字典实现,对于一个特定的字符串,使用for循环遍历其中的字符,并保存成字典形式.字典的key为字符,value为字符在整个字符串中出现的次数. 2.拓展:如果题目为比较两个字 ...
- Java 13天基础 06天map集合小练习(黑马程序员) 统计字符串中每个字符出现的次数 (经典面试题)
import java.util.HashMap; import java.util.Map; import java.util.Scanner; /** * 目标 : 输出一个字符串中每个字符出现的 ...
- javascript 统计字符串中每个字符出现的次数
var str = "abdcadfasfdbadfafdasdfasyweroweurowqrewqrwqrebwqrewqrejwq;;"; // console.log(nu ...
- Java中统计字符串中各个字符出现的次数
import java.util.Iterator; import java.util.Set; import java.util.TreeMap; public class TreeMapDemo ...
随机推荐
- Go part 2 基础语法
关键字.标识符 标识符: 是用户或系统定义的有意义单词组合,或单词与数字组合(具体意义有定义者决定) 标识符以字母下划线开头,大小写敏感,比如:boy, Boy, _boy, _(匿名变量,用来 ...
- 创建多线程时,为何创建后需要Sleep?
后面的线程用到了前面线程初始的结构,sleep一下只是做到了使前一个线程初始化完成后后一个线程才开始运行.但这样不严格,需要同步机制.在么多个线程都要用的数据结构不要放到子线程内部去初始化,程序启动时 ...
- 把zTree前的展开收起图标改为三角形,且只有在点击三角形图标时才展开子节点解决方案
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta ht ...
- ES6--JavaScript扩展知识点(let、const、解构)
一,ES2015(ES6)新增了两个声明变量的关键字:let.const let:只在代码块内{}有效,不可重复声明,不会提前初始化 1.只在代码块内有效 { let a = 1; var b = 2 ...
- git remote 使用总结
使用场景:新建一个git仓储并与远程关联 1.初始化一个新的空的git仓储,并在仓储下做一些改动 mkdir gitDir cd gitDir/ git init touch file git sta ...
- Spring MVC通过拦截器处理sql注入、跨站XSS攻击风险
sql注入就是通过url或者post提交数据时候,字符串类型的参数会被别人利用传入sql语句,最终破坏数据库或者达到一些见不得人的目的. 有时候因为业务需要url中会带一些参数,比如 ?type=xx ...
- dubbo框架梳理
Dubbo分层 Dubbo框架运行主要分如下九层: 配置层:config 服务代理层:proxy 注册中心层:registry 路由层:cluster 监控层:monitor 远程调用层:protoc ...
- 同一个url对应多个视图函数,取第一个视图函数有效
# -*- coding: utf-8 -*- from flask import Flask app = Flask(__name__) @app.route('/') def index(): r ...
- SuperMemo method
原文:https://www.supermemo.com/en/archives1990-2015/english/ol/sm2 别人的研究:http://wdxtub.lofter.com/post ...
- linux分析工具之top命令详解
Linux系统可以通过top命令查看系统的CPU.内存.运行时间.交换分区.执行的线程等信息.通过top命令可以有效的发现系统的缺陷出在哪里.是内存不够.CPU处理能力不够.IO读写过高. 一.top ...