单词识别

2020-04-02  本文已影响0人  HelloSam

#include<iostream>
#include<cctype>
#include<map>
#include<string>
using namespace std;

int main()
{
    map<string,int> mp;
    string s;
    getline(cin,s);
    int j=0;//定义在外面
    for(int i=0;i<s.size();i++)
    {
        if(s[i]>='A' && s[i]<='Z') s[i] = tolower(s[i]);//转小写

        if((s[i]>'a' && s[i]<'z') || (s[i]==' ' || s[i]==',' || s[i]=='.')) //只有s[i]是字母或特殊符号才操作
            if((s[i]==' ' || s[i]==',' || s[i]=='.'))//空格,逗号,句号
            {
                if(mp.find(s.substr(j,i-j))==mp.end())//如果集合中没有这个字符串为key的元素,则加入
                    mp.insert(make_pair(s.substr(j,i-j),1));
                else mp[s.substr(j,i-j)]++;
                j = i+1;
            }
    }

    if(mp.find("")!=mp.end())//如果有一个字符加一个空格导致截取到空字符串这种情况
        mp.erase(mp.find(""));//那就删除这个空字符串,否则不用做处理

    for(map<string,int>::iterator it = mp.begin();it!=mp.end();it++)
    cout << it->first <<":"<<it->second<<"\n";
    return 0;
}
//有空字符放到map里面是因为有这种情况,streets. A,即'.'后面紧接着是空格
上一篇下一篇

猜你喜欢

热点阅读