ACM 题目 1487: [蓝桥杯][算法提高VIP]不同单词个数统计
题目描述
编写一个程序,输入一个句子,然后统计出这个句子当中不同的单词个数。例如:对于句子“one little two little three little boys”,总共有5个不同的单词:one, little, two, three, boys。
说明:(1)由于句子当中包含有空格,所以应该用gets函数来输入这个句子;(2)输入的句子当中只包含英文字符和空格,单词之间用一个空格隔开;(3)不用考虑单词的大小写,假设输入的都是小写字符;(4)句子长度不超过100个字符。
说明:(1)由于句子当中包含有空格,所以应该用gets函数来输入这个句子;(2)输入的句子当中只包含英文字符和空格,单词之间用一个空格隔开;(3)不用考虑单词的大小写,假设输入的都是小写字符;(4)句子长度不超过100个字符。
输入
输入只有一行,即一个英文句子。
输出
输出只有一行,是一个整数,表示句子中不同单词的个数。
样例输入
one little two little three little boys
样例输出
5
思路:
strlen的功能是统计字符串s的长度(unsigned int 型)
用一个same方法去判断两两字符串是否一样
然后对于用户输入的字符串反复调用这个函数计算整个字符串有多少个不相同的字符
代码:
#include<stdio.h>
int same(char x[],char y[])
{
int i,j;
if(strlen(x)!=strlen(y)) return 0;
for(i=0;i<strlen(x);i++)
{
if(x[i]!=y[i]) break;
}
if(i<strlen(x)) return 0;
else return 1;
}
int main()
{
char x[200][200];
int i,j=0,k,cnt=0;
while(~scanf("%s",x[j++]));
for(i=0;i<j;i++)
{
for(k=i+1;k<j;k++)
{
if(same(x[k],x[i]))
break;
}
if(k<j) continue;
else cnt++;
}
printf("%d",cnt-1);
}