北理复试上机题单词识别以及cin,cin.get()等输入符的使用

题目就不描述了,直接转至牛客可查看:

单词识别

上代码:

//使用了map容器以及用cin.get()逐个读入字符
#include<iostream>
#include<string>
#include<map>

using namespace std;

int main()
{
	string s="";
	char ch;
	map<string,int> m;
	while(cin.get(ch))  //cin.get()逐个读入字符
	{
        //说明s字符串中已经存下一个单词,将其扔到map中,将s赋空,以便存入下一个单词
		if(ch==',' || ch=='.' || ch=='\n' || ch==' ')
		{
			if(s!="")  //将s中的内容,(一个单词),赋给map
			{
				
				m[s]++;
				s = "";
			}
		}
		else
        //此单词还没有读取完毕,将读取到的字符都转化为小写,暂时存入字符串s中
		{
			ch=tolower(ch);
			s += ch;
		}
	}
    //map自动将键值对排序,省去了很多麻烦,直接从头到尾遍历输出就好了
	map<string,int>::iterator it;
	for(it=m.begin(); it!=m.end(); it++)
		cout<<it->first<<":"<<it->second<<endl;
	return 0;
}

 

cin不能读入空格回车制表符,本题也可以使用,但那就不是逐个读取字符,而是另一种解题思路了,肯定能做,但不如上面这个简单。

cin.get()能够读取空格回车制表符,遇EOF(Ctrl+Z)结束读取,能够实现逐个读取字符,读取后手动将单词分割。

scanf同cin一样,也不能读取空格回车制表符

getline()可实现成行读取,也就是可读取空格。

读取方式cin,cin.get(),gets(),getline等等等等对处理字符串的题目很重要,有空再补充吧。

下面是一些关于读取方式的文章,觉得还不错。

c++getline

cin,cin.get(),gets()区别

scanf与gets()的区别

cin.get用法

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值