[HDU2072]单词数<字符串>
链接:http://acm.hdu.edu.cn/showproblem.php?pid=2072
Problem Description
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。
Input
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。
Output
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。
Sample Input
you are my friend
#
Sample Output
4
思路:
一道很简单的字符串裸题,字符串的简单应用
数据范围挺小,所以直接暴力模拟就可以了
会用到函数
strcmp 比较两个字符串 相同返回0
strcpy 拷贝字符串
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<bits/stdc++.h> #define ll long long #define inf 0x3fffffff using namespace std; int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } void fre(){ freopen(" .in","r",stdin); freopen(" .out","w",stdout); } string pas; char all[1005][105],now[105]; int len,num; int main(){ while(1){ getline(cin,pas); if(pas[0]=='#')return 0; len=pas.size(); pas+=' '; int poi=0,tot=0,can=0; for(int i=0;i<=len;i++){ if(pas[i]!=' '){ int l=0; poi=i;now[l++]=pas[poi]; for(i=i+1;i<=len;i++){ if(pas[i]==' ')break; now[l++]=pas[i]; } now[l]='\0'; for(int j=1;j<=tot;j++) if(strcmp(all[j],now)==0){ can=1;break; } if(can==0){ strcpy(all[++tot],now); }can=0; } /* if(pas[i]==' '){ int l=0; for(int j=poi;j<i;j++){ now[l++]=pas[j]; }poi=i+1; now[l]='\0'; for(int j=1;j<=tot;j++) if(strcmp(all[j],now)==0){ can=1;break; } if(can==0){ strcpy(all[++tot],now); }can=0; }*/ } cout<<tot<<endl; } return 0; }
之前一直wa
后来换了一种找单词的方式就没问题了
就是注释部分出错了
应该是注释部分不能很好处理多空格情况,会使tot变大
(下次一定改下次一定改)