HDU 2072 单词数

单词数

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 55351    Accepted Submission(s): 13839


Problem Description
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。
 
Input
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。
 
Output
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。
 
Sample Input
you are my friend #
 
Sample Output
4
 
Author
Lily
 
Source
 
Recommend
linle   |   We have carefully selected several similar problems for you:  2054 2073 2083 2076 2068 
 
用map记录每次空格前的部分即可,要注意开头空格,结尾空格和多个空格相连的情况
记录的时候用map<string,int>而不能用map<char*,int>      char*始终是一个指针保存的是地址值
而不是字符串
代码如下:
 
#include <cstdio>
#include <iostream>
#include <cstring>
#include <map>
#include <algorithm>
using namespace std;
#define INF 0x3f3f3f3f
char str[1000000];
map<string,int>mp;
char tmp[10000];
int main()
{
    int l,ans,len;
    while(gets(str))
    {
        ans=0;
        mp.clear();
      if(str[0]=='#')break;
      len=strlen(str);
      str[len]=' ';
      len++;
      str[len]=0;
      l=0;
        for(int i=0;i<len;i++)
        {
          if(str[i]!=' ')
          {
             tmp[l]=str[i];
             l++;
          }
          else
          {
             tmp[l]=0;
             if(l>0){
             if(!mp[tmp])
             {
                 ans++;
                 mp[tmp]=1;
             }
             }
             l=0;
          }
        }
        printf("%d
",ans);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/a249189046/p/7490329.html