标题:你是否还有更好的方法??
只看楼主
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
结帖率:98.26%
已结贴  问题点数:20 回复次数:5 
你是否还有更好的方法??
今天在做ACM题的时候遇到了这样一道题:

lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。
 
Input
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。
 

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

Sample Input
you are my friend
#
 

Sample Output
4
这是我写的代码,可是写完之后发现这种方法不是很好,想问一下高手有没有更好的写法呢???

# include <stdio.h>
# include <string.h>

char words[1000] ;
char *pstr[1000] ;

int main()
{
    int i , j ;
    char *token ;
    while(gets(words) != NULL && words[0] != '#')
    {
        i = 0 ;
        token = strtok(words , " ") ;
        pstr[i] = token ;
        for( ; token != NULL ; token = strtok(NULL , " "))
        {
            for(j = 0 ; j < i + 1 ; j++)
                if(strcmp(token , pstr[j]) == 0)
                    break ;
            if(j == (i + 1))
            {
                i++ ;
                pstr[i] = token ;   
            }
        }
        printf("%d\n" , i+1) ;
    }
    return 0 ;
}


期待ing
搜索更多相关主题的帖子: 文章 单词 标点符号 friend 
2010-12-15 16:42
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
得分:7 
呵呵 帮你顶上去了
我ACM的题目 不敢做啊

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2010-12-15 16:47
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
得分:0 
回复 2楼 vandychan
呵呵!vandychan 大哥谦虚了呀!我也不行呀,有些题也是不会做的呀,嘎嘎!个人只是觉得多做做对自己的编程能力与想问题的思路有很大的帮助!

愿用余生致力编程
2010-12-15 16:49
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
得分:0 
我还是继续做我的数据库了

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2010-12-15 16:57
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
得分:0 
回复 4楼 vandychan
支持vandychan大哥呀!

愿用余生致力编程
2010-12-15 17:18
『点点滴滴』
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:168
专家分:1035
注 册:2007-7-9
得分:7 
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int vis[26]={0};
typedef struct node
{
    char s[20];
    struct node *next;
}Node,*pNode;
typedef struct hnode
{
    struct node *next;
}HeadNode,*pHeadNode;
HeadNode *newHead()
{
    pHeadNode p;
    p=(pHeadNode)malloc(sizeof(pHeadNode));
    if(!p)
    {
        printf("creat Headnode error!");
        exit(1);
    }
    p->next=NULL;
    return p;
}
pNode newnode()
{
    pNode p;
    p=(pNode)malloc(sizeof(pNode));
    if(!p)
    {
        printf("creat node error!");
        exit(1);
    }
    return p;
}
void addnode(pHeadNode head,char *word)
{
    pNode p=newnode();
    strcpy(p->s,word);
    p->next=head->next;
    head->next=p;
}
int main()
{
    char ch;
    char sentence[100];
    char word[20]={0};
    int length=0,i=0,j=0;
    pHeadNode HeadNode[26];
    pNode p;
    int sum=0;
    int flag=0;
    gets(sentence);
    length=strlen(sentence);
    while(sentence[length-1]==' ')    //去掉句子后边多余空格
        length--;
    sentence[length]='\0';
    length=0;
    while((ch=sentence[j++])!='\0')
    {
        if(ch!=' ')
        {
            length++;
            word[i++]=ch;
        }
        else
        {
            if(!vis[length])
            {
                vis[length]=1;
                HeadNode[length]=newHead();
                addnode(HeadNode[length],word);
                sum++;
            }
            else
            {
                p=HeadNode[length]->next;
                while(p)
                {
                    if(strcmp(p->s,word)==0)
                    {
                        flag=1;
                        break;
                    }
                    p=p->next;
                }
                if(!flag)
                {
                    sum++;
                    addnode(HeadNode[length],word);
                }
            }
            memset(word,0,20);
            length=0;
            i=0;
            flag=0;
        }
    }
    if(!vis[length])
    {
        vis[length]=1;
        HeadNode[length]=newHead();
        addnode(HeadNode[length],word);
        sum++;
    }
    else
    {
        p=HeadNode[length]->next;
        while(p)
        {
            if(strcmp(p->s,word)==0)
            {
                flag=1;
                break;
            }
            p=p->next;
        }
        if(!flag)
        {
            sum++;
            addnode(HeadNode[length],word);
        }
    }
    printf("%d",sum);
    return 0;
}

乱写的....
2010-12-16 20:41



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-329040-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.282593 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved