Problem Description
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。
Input
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。
Output
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。
Sample Input
you are my friend
#
Sample Output
4
我的思路:将输入的字符串中的字母统计出来,之后在对其进行是否相同比较,但最后总是纠结于最后的空格。
附代码及分析:
#include<stdio.h>
#include<string.h>
int main()
{
char a[10000], b[10000][100];
int c[10000] = { 0 };
int i, j, k, n, len, t, s, sum, num;
while (gets(a))
{
if (strcmp(a, "#") == 0)
{
break;
}
len = strlen(a);
n = 0;
k = 0;
j = 0;
for (i = 0; i < len; i++)
{
if (a[i] != ' ') //在此开始记录单词
{
b[j][n++] = a[i];
k = 1; //k的作用就是判断单词是否在统计
}
if (a[i] == ' ' && k == 1) //每个单词统计完之后,单词为加'\0'
{
b[j][n] = '\0'; //所有初始数据全部清零
k = 0;
n = 0;
j++;
}
}
num = 0;
for (i = 0; i <= j; i++) //这一块的目的就是为了去除统计进去的空格,统计单词个数,可感觉没用,应为下边最后还得判断最后是否为空格
{
if (strcmp(b[i], " ") != 0)
num++;
}
t = num;
sum = 0;
for (i = 0; i < t; i++)
{
for (j = i + 1; j < t; j++)
{
if (strcmp(b[i], " ") != 0)
{
if (strcmp(b[j], b[i]) == 0)
{
strcpy(b[j], " ");
sum++;
}
}
}
}
if (a[len - 1] == ' ') t--; //纠结点就在此处,加上就AC,不加就WR
printf("%d\n", t - sum);
}
return 0;
}
//望有高手指点迷津,最后一块if(a[len-1]==' ') t--;和中间的剔除空格统计字母那一块;