失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 【面试题总结】1 统计字符串中某个单词出现的次数(1-C++实现)

【面试题总结】1 统计字符串中某个单词出现的次数(1-C++实现)

时间:2021-11-07 08:45:37

相关推荐

【面试题总结】1 统计字符串中某个单词出现的次数(1-C++实现)

【解决方法一】C++ map解决

一、map中的find函数:

用于查找map中是否包含某个关键字条目,传入的参数是要查找的key,最后返回一个迭代器,如果没有找到,则返回的迭代器等于end()返回的迭代器。示例代码:

1 #include<iostream> 2 #include<string> 3 #include<map> 4 using namespace std; 5 6 int main() { 7map<int, string> mapStudent; 8 9mapStudent.insert(pair<int, string>(1, "student_one"));10mapStudent.insert(pair<int, string>(2, "student_two"));11mapStudent.insert(pair<int, string>(3, "student_three"));12 13map<int, string>::iterator iter;14iter = mapStudent.find(3);15if (iter != mapStudent.end()) 16 cout << "Find,the value is: " << iter->second << endl;17system("pause");18return 0;19 }

运行结果:

二、map的插入方法:

插入的方法有好几种,下面介绍:map.insert(pair<type1,type2>(key,value))这种,还有一种是map[key] = value,前者出现重复不会发生改变,后者出现重复则会发生覆盖,后者如果没有给value值,直接使用map[key],则其value值默认为0。示例代码:

1 #include<iostream> 2 #include<string> 3 #include<map> 4 using namespace std; 5 6 int main() { 7 8map<int, string> mapStudent; 9mapStudent.insert(pair<int, string>(1, "student_one"));10mapStudent.insert(pair<int, string>(2, "student_two"));11mapStudent.insert(pair<int, string>(2, "xxooxxooxxo"));//不起作用12 13map<int, string>::iterator iter;14for (iter = mapStudent.begin(); iter != mapStudent.end(); iter++) {15 cout << iter->first << ' ' << iter->second << endl;16}17cout << endl;18mapStudent[2] = "xxooxxooxxoo";//覆盖掉前面的value19for (iter = mapStudent.begin(); iter != mapStudent.end(); iter++) {20 cout << iter->first << ' ' << iter->second << endl;21}22system("pause");23return 0;24 }

运行结果:

三、是否插入成功?

我们通过pair来获取是否插入成功,pair返回两个变量,第一个是map的迭代器,第二个是插入成功的标志,插入成功pair的第二个参数是true,插入失败,第二个参数为false。实例代码:

1 pair<map<type1,type2>::iterator,bool> ret;2 3 ret = map_s.insert(pair<type1,type2>(key,value))4 5 if(ret.second==ture)6 7cout<<"插入成功"<<endl;8 else9cout<<"插入失败"<<endl;

四、统计字符出现个数:

思路1:先创建一个map,遍历字符串,逐个判断如果存在则count++,不存在则创建一个,让其value为1

思路2:通过插入失败来增加字符的个数,如果插入失败则表明map中存在该字符,count++即可

思路3:需要对map了解,直接使用库里提供的[]运算符重载。通过键值找节点,直接给给实值+1.

思路1:先创建一个map,遍历字符串,逐个判断如果存在则count++,不存在则创建一个,让其value为1。代码如下:

1 #include<iostream> 2 #include<string> 3 #include<map> 4 using namespace std; 5 6 // 方法1: 7 int main() 8 { 9map<char, int> map_s;10string str = "kkk ahguird-j l";11 12for (int i = 0; i < str.length(); ++i) 13{14 map<char, int>::iterator iter = map_s.find(str[i]);15 if (iter != map_s.end()) 16 { 17 iter->second++;18 }19 else// 如果找不到就添加一个,找到了就count++20 { 21 map_s.insert(pair<char, int>(str[i], 1));// 如果测试用例为 "qwerqwer"时,前4次循环都是执行的这句else即insert插入操作22 }23}24map<char, int>::iterator iter = map_s.begin();25 26for (; iter != map_s.end(); iter++) 27{28 cout << iter->first << ' ' << iter->second << endl;29}30cout << endl;3132system("pause");33return 0;34 }

运行结果:

思路2:通过插入失败来增加字符的个数,如果插入失败则表明map中存在该字符,count++即可。代码如下:

1 #include<iostream> 2 #include<string> 3 #include<map> 4 using namespace std; 5 6 int main() 7 { 8map<char, int> map_s; 9string str = "kkk ahguird-j l";10 11pair<map<char, int>::iterator, bool> ret;12for (int i = 0; i < str.length(); ++i)13{14 ret = map_s.insert(pair<char, int>(str[i], 1));15 if (ret.second == false) // 如果插入失败,则该迭代器的第一个参数的value++16 { 17 ret.first->second++;18 }19}20map<char, int>::iterator iter = map_s.begin();21for (; iter != map_s.end(); iter++)22{23 cout << iter->first << ' ' << iter->second << endl;24}25cout << endl;26 27system("pause");28return 0;29 }

运行结果:

思路3:直接使用库里提供的[]运算符重载。通过键值找节点,直接给给实值+1.

1 #include<iostream> 2 #include<string> 3 #include<map> 4 using namespace std; 5 6 int main() { 7string str; 8map<char, int> map_s; 9while (cin >> str) {10 for (int i = 0; i < str.length(); ++i) {11 map_s[str[i]]++;12 }13 map<char, int>::iterator iter;14 for (iter = map_s.begin(); iter != map_s.end(); ++iter) {15 cout << iter->first << ':' << iter->second << endl;16 }17}18 }

思路3是真的6阿~

参考连接:/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++.

1 #include<iostream> 2 #include<map> 3 using namespace std; 4 5 int main() { 6map<char, int> m; 7m.insert(pair<char, int>('a', 1)); 8map<char, int>::iterator iter = m.begin(); 9cout << iter->first << ' '<<iter->second<<endl;10m['b'];11iter++;12cout << iter->first << ' ' << iter->second << endl;//value默认是013m['b']++;14cout << iter->first << ' ' << iter->second << endl;//将value++15while (1);16 }

如果觉得《【面试题总结】1 统计字符串中某个单词出现的次数(1-C++实现)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。