题目大意:统计一篇文章里不同单词的总数
思路:简单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());
}
}