【面试题总结】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 ...
随机推荐
- GNU,GPL与自由软件
GNU 是 Richard Stallman(理查德·斯托曼)创建的一个项目,not unix GPL(General Public License),GNU通用公共许可证.书面上的协议 自由软件与开 ...
- C# List<> Find相关接口学习
参考 http://blog.csdn.net/daigualu/article/details/54315564 示例: List<int> test = new List<int ...
- 解决IE8中select下拉列表文字上下不居中的问题
对IE8及以下的浏览器设置padding属性,其他浏览器则设置line-height 属性
- fastclick插件中存在的bug
1.在vue项目中安装fastclick插件 npm install --save fastclick 2.在main.js中引入并绑定到body import FastClick from 'fas ...
- Java 之 Map 接口
一.Map 接口概述 java.util.Map 接口专门用来存放键值对这种对象关系的对象. 下面比较一下 Collection 与 Map 的区别: Collection 中的集合,元素是孤立存在的 ...
- 后台向前台响应的json数据格式的一些问题
最近在写后台向前台easyUI页面发送数据时遇到的一些报错. 首先easyUI内部封装了许多的方法和对象,以至于很多参数都不清楚,需要查询,其次easyUI也是有内置ajax所以从后台响应回来的数据一 ...
- rt-thread下调试elmfat 问题记录
硬件平台:stm32f107 SPI flash:w25q32 RTT版本:v2.1 w25q32的驱动大神们已经写好(w25qxx.c),我只需要照猫画虎的实现相应SPI的驱动程序即可(bsp例 ...
- COM_STMT_PREPARE 1
mysqld_stmt_prepare void mysqld_stmt_prepare(THD* thd, const char * query, uint length, Prepared_sta ...
- 【Java基础-实验7】Banking_7 -添加银行透支扣款系统的 thorw异常机制
实验基本要求: 实验题目 7:(在6基础上修改) 将建立一个 OverdraftException 异常,它由 Account 类的withdraw()方法 抛出. 实验目的: 自定义异常 实验说明: ...
- Maya cmds polyOptions() 获取和设置 mesh 的属性
Maya cmds polyOptions() 获取和设置 mesh 的属性 举例: cmds.polyOptions(dt = True) # 显示所有选择的 mesh 的三角化线(四边形的对角虚线 ...