单词数
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 54584 Accepted Submission(s): 13580
Problem Description
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。
Input
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。
Output
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。
Sample Input
you are my friend
#
Sample Output
4
WA了N次终于提交上了,最初没有看清题目,稀里糊涂的把课本上的代码敲了上去,WA了几次才发现题目读漏了“不同”两个字,本来以为需要换个思路,后来发现并不需要切换,只需后续补加几个步骤即可。
首先统计总单词数,然后求出重复单词数,两者求差即可得到。但是,求重复单词数时,必将将所有单词录入某个字符数组中,进行相互比较。于是遇见了第一个困难,怎么确保除去空格,只录入单词?于是利用现成的代码,进行了改造。Else if的条件是当空格后遇见的第一个字母,于是以此为起点,到下一个空格前的字母终止,于是利用do whil循环,在while循环里进行提前遍历,从而实现录入单词。但是在这一歩中出现了很多错误。
1. a[count][j-i]=str[j]。
这一语句最初写的是strcpy()函数,最后发现总是出错。。。。主要还是二维字符数组使用的不够熟练。
2. while(str[j]!=’ ‘&&str[j]!=’\0’);
while的条件最初只写了前半句,没有对后半句进行限制,最后输出出来后,发现会比输入的数据多出来很多乱码,于是想起来需要对数据的结尾进行控制。(因为数据最后还可能会有很多个空格,从而出现错误答案)。
3. int j=i;
这是第一个错误,没有看清楚,把它放在了do中。。。。。
将所有的单词录入后,便是单词相互比较求出重复单词数。最开始犯了一个很低级的错误,将strcmp函数写成了strcpy函数,甚至自己看了好多遍都没发现。在这一步也用了很多时间,出现大大小小的错误。
1. if(strcmp(a[i],a[j])==0&&strcmp(a[i],” “)!=0)
同上面的2一样,后半部分没有写上,于是出现了复数的情况。在输出所有结果后发现,进行遍历时,第一次被换为“ ”时,会和后续的“ ”重复,从而count–,导致出错。
2. memset(a,0,sizeof(a));
最初没有使用这一函数,于是出现了如果第二次相同位置的单词长度大于第一次的,会出现两个单词混在一起的情况,也就是可能只有第一的答案是正确的。所以需要用这个函数将数组数据重置。
最后把所有的代码粘上。
#include<stdio.h>
#include<string.h>
using namespace std;
int main(){
char str[500],ch,a[100][100];
while(gets(str)){
memset(a,0,sizeof(a));
int count=0;
int i=0,flag=0,j=0;
if(str[0]=='#')
break;
while((ch=str[i])!='\0'){
if(ch==' ')
flag=0;
else if(flag==0){
int j=i;
flag=1;
count++;
do{
a[count][j-i]=str[j];
j++;
}
while(str[j]!=' '&&str[j]!='\0');
}
i++;
}
// printf("%d\n",count);
int b=count;
// for(i=1;i<=count;i++)
// printf("%s ",a[i]);
// printf("\n");
for(i=1;i<=b;i++){
for(j=i+1;j<=b;j++){
// printf("%d/%d\n",i,j);
// printf("%s %s\n",a[i],a[j]);
// printf("%d\n",strcmp(a[i],a[j]));
if(strcmp(a[i],a[j])==0&&strcmp(a[i]," ")!=0){
count--;
strcpy(a[j]," ");
// printf("COUNT:%d\n",count);
}
}
}
printf("%d\n",count);
}
return 0;
}
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。