字符串
输入一行由小写字母和空格组成的句子,计算相同单词的个数。
需要注意的几点:
1) 如果一行句子只有空格,则有0个单词。
2) 如果一行句子由空格开头,不能算作单词个数。
3) 如果两个单词之间有n个空格隔开,不能算作单词个数。
4) 如果句子由n个空格结尾,不能算作单词个数。
5) 相同的单词的个数只是一个。
AC代码:
#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
int main ()
{
char *c = NULL,*d = NULL;
char a[81];
char b[41][81];
int i,j,k,len,count,cnt;
while(gets(a))
{
if(a[0] == '#') break;
len = strlen(a);
cnt = 0;
for(i=0; i<len; i++) //特殊情况,只由空格组成的句子
{
if(a[i] == ' ')
cnt++;
}
if(cnt == len)
{
printf("0\n");
continue;
}
for(i=len-1; i>=0; i--) //最后的空格,去掉
{
if(a[i] == ' ')
a[i] = NULL;
else
break;
}
len = strlen(a);
for(i=0; i<len; i++) //开始的空格,去掉
{
if(a[i] == ' ')
a[i]=NULL;
else
{
d = a+i;
break;
}
}
len = strlen(d); //中间的空格,赋NULL,并记录单词
d[len] = ' ';
d[len+1] = NULL;
c = d;
j = 0;
for(i=0; i<=len; i++)
{
if(d[i] == ' ')
{
d[i] = NULL;
if(d[i+1] != ' ')
{
strcpy(b[j], c);
j++;
c = d+i+1;
}
}
}
count = j; //处理单词,相同的记一次
for(i=0; i<j; i++)
{
for(k=i+1; k<j; k++)
{
if(strcmp(b[i], b[k])==0 && b[k][0]!='$')
{
count--;
b[k][0] = '$'; //$是标志,表示该相同单词已被减过,不能再减
}
}
}
printf("%d\n", count);
}
return 0;
}