HDU 2072 单词数 map的应用

来源:互联网 发布:遗传算法 机械应用 编辑:程序博客网 时间:2024/06/05 19:23

题目链接

题目大意:统计一篇文章里不同单词的总数


思路:简单map


WA两次:细节细节细节


AC代码:

#include <iostream>#include <stdio.h>#include <map>#include <string>using namespace std;int main(){    string str;    while(getline(cin,str) && str[0] != '#')//注意getline的用法    {        string a;        map<string,int> mp;        mp.clear();        int ans = 0;        for(int i = 0; i < str.length(); i++)        {            int flag = 0;            while(str[i] >= 'a' && str[i] <= 'z')            {                a += str[i++];                flag = 1;            }            if(mp[a] == 0 && flag)            {                ans++;                mp[a] = 1;            }            a.clear();//a.clear被我放到if里面了,WA了两次        }        printf("%d\n", ans);    }}

写这题的时候发现了一个奇怪的地方,输出用的ans记录的单词数,但是如果用mp.size()输出,在全部都是空格的情况下会输出1,多个空格的时候也会多输出,:-(


奇怪代码:

#include <iostream>#include <stdio.h>#include <map>#include <string>using namespace std;int main(){    string str;    while(getline(cin,str) && str[0] != '#')    {        string a;        map<string,int> mp;        mp.clear();        int ans = 0;        for(int i = 0; i < str.length(); i++)        {            int flag = 0;            while(str[i] >= 'a' && str[i] <= 'z')            {                a += str[i++];                flag = 1;            }            if(mp[a] == 0 && flag)//因为判断mp[a] == 0的时候已经把a插入mp里了,所以会多输出,写成if(flag && !mp[a])就能过了                mp[a] = 1;            a.clear();        }        printf("%d\n", mp.size());    }}