HDU 2072

来源:互联网 发布:ubuntu下删除文件夹 编辑:程序博客网 时间:2024/05/16 08:45
Problem Description
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。
 


Input
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。
 


Output
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。
 


Sample Input
you are my friend#
 


Sample Output
4
 
这道题的思路是创建两个数组,一个一维,一个二维,先输入一维数组,将一维数组中的单词句子中的每个单词都单独赋值给二维数组中的一行,并且在赋值给二维数组之后每个单词之后都要加上‘\0’作为字符串结束标志,(这道题运用了strcmp函数,头文件为#include<string.h>,这个函数的作用是从左向右按ASC||值大小逐个字符比较两个字符串,直到出现不同的字符或者遇到‘\0’为止。)赋值后用strcmp函数将二维数组中单词相同的行数的开头都换成‘0’,然后用一个初始值为0的整形变量sum统计开头不为‘0’的二维数组行数就可以了,以下是代码
#include<stdio.h>
#include<string.h>
char b[10005][10005];
char c[10005];
int main()
{
    int i,j,len,k,t,sum;
    while(gets(c))
    {
        k=0;t=0;
        if(c[0]=='#')break;
        len=strlen(c);
        for(i=0;i<len;i++)
            if(c[i]>='a'&&c[i]<='z')break;
        if(i==len){printf("0\n");continue;}
        for(;i<len;i++)
        {
            if(i==len-1&&c[i]>='a'&&c[i]<='z'){b[k][t]=c[i];b[k][t+1]='\0';break;}
            if(i==len-1&&c[i]==' '){b[k][t]='\0';break;}//这两行是为了在将字符串c的末尾添加到二维数组中的时候在最后加上\0
            if(c[i+1]>='a'&&c[i+1]<='z'&&c[i]==' ')
            {b[k][t]='\0';k++;t=0;}
            if(c[i]>='a'&&c[i]<='z')
                b[k][t++]=c[i];
        }
        for(i=0;i<k;i++)
        {
            for(j=i+1;j<=k;j++)
            if(strcmp(b[i],b[j])==0&&b[i][0]!='0')
                b[j][0]='0';
        }sum=0;
        for(i=0;i<=k;i++)
        {
            if(b[i][0]!='0')
                sum++;
        }printf("%d\n",sum);
    }return 0;
}
这个程序我研究了一个上午,我是新手,感觉真的挺不错的,我将可能出现的情况基本考虑了一遍,仔细体会一下这个代码吧
1 0
原创粉丝点击