| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 922 人关注过本帖
标题:计算文本中各个单词的字数并输出(代码我重写了一遍,但发现执行后会输出乱码 ...
取消只看楼主 加入收藏
captain2050
Rank: 2
等 级:论坛游民
帖 子:57
专家分:43
注 册:2016-7-15
结帖率:92.86%
收藏
已结贴  问题点数:10 回复次数:3 
计算文本中各个单词的字数并输出(代码我重写了一遍,但发现执行后会输出乱码,请问怎么回事?代码在六楼)
执行后发现每次只能输出两个词,不知为啥??帮忙看看。 谢谢

程序代码:
#include<string.h>
#include<stdio.h>
#include<stdbool.h>

#define TEXT_LEN 10000        //maximum length of the text
#define BUF_LEN 100                //the maximum length of each time of input
#define WORDS_MAX 500     //there are at most 500 words
#define WORDS_LEN 12     //length of each word should smaller than 12

int main()
{
    char delimiters[]=" \n,.?;!";
    char text[TEXT_LEN];                    //store the whole text
    char buf[BUF_LEN];                        //store one input line
    char words[WORDS_MAX][WORDS_LEN];   //store all the words
    int nword[WORDS_MAX]={0};                //store the number of words occurrences
    int word_count=0;                                            //the number of words
   

    printf("please enter strings.Enter an empty line to end input\n");
                //start to input........
    while(1)
    {
        fgets(buf,BUF_LEN,stdin);
        if(buf[0]=='\n')
            break;
        if(!strcat(text,buf))
        {
            printf("error!!!\n");break;
        }
    }
                   

    char *pword=strtok(text,delimiters);
    if(!pword)
    {
        printf("there is no word\n");return 1;
    }
    strcpy(words[word_count],pword);
    ++nword[word_count++];
   

    bool new_word=true;    //找到的单词已存在words中就是false否则就是true

    while(true)
    {
        pword=strtok(NULL,delimiters);
        if(!pword)
            break;
        for(int i=0;i<word_count;i++)   //old word
            if(strcmp(words[i],pword)==0)
            {
                nword[i]++;
                new_word=false;
            }
        if(new_word)                                                //new word
        {
            strcpy(words[word_count],pword);
            ++nword[word_count++];
        }
        else
            new_word=true;
        if(word_count>WORDS_MAX)
        {
            printf("there are too many words");
            return 1;
        }
       

        //list all the words
        for(int i=0;i<word_count;i++)
        {
            printf("%-13s %3d  ",words[i],nword[i]);
            if((i+1)%2==0)
                printf("\n");
        }
        printf("\n");
        return 1;
    }
   

   

   

   

   

   

   

   

   

   

}



[此贴子已经被作者于2016-8-3 17:44编辑过]

搜索更多相关主题的帖子: 单词 
2016-08-03 10:17
captain2050
Rank: 2
等 级:论坛游民
帖 子:57
专家分:43
注 册:2016-7-15
收藏
得分:0 
回复 2楼 grmmylbs
二楼的同胞啊。。。这程序里那么多括号!!
麻烦你告诉我是哪个括号写错了啊??
谢谢
2016-08-03 10:36
captain2050
Rank: 2
等 级:论坛游民
帖 子:57
专家分:43
注 册:2016-7-15
收藏
得分:0 
回复 4楼 grmmylbs
哦。。。
谢谢。。没看到。。隐藏得太深了。
谢谢。。
2016-08-03 10:45
captain2050
Rank: 2
等 级:论坛游民
帖 子:57
专家分:43
注 册:2016-7-15
收藏
得分:0 
回复 4楼 grmmylbs
代码我重写了一遍,但发现执行后会输出乱码,请问问题出在哪里?谢谢了
程序代码:
#include<stdio.h>
#include<string.h>
#include<stdbool.h>

#define TEXT_MAX 1000
#define BUF_SIZE 50
#define WORDS_MAX 500
#define WORDS_LEN 13

int main()
{
    char delimiters[]=" ,.?!;\n";
    char text[TEXT_MAX];
    char buf[BUF_SIZE];
    char words[WORDS_MAX][WORDS_LEN];
    int nwords[WORDS_MAX]={0};
    int count=0;
   

    printf("please enter strings(end input with an empty line)\n");
    while(1)
    {
        fgets(buf,BUF_SIZE,stdin);
        if(buf[0]=='\n')
            break;
        if(!strcat(text,buf))
        {
            printf("error\n");
            break;
        }
    }
   

    bool new=true;
    char *p=strtok(text,delimiters);
    if(!p)
    {
        printf("there is nothing\n");
        return 0;
    }
    strcpy(words[count],p);
    ++nwords[count++];
   

    while(1)
    {
        p=strtok(NULL,delimiters);
        if(p==NULL)
            break;
        for(int i=0;i<count;i++)
       

            if(strcmp(words[i],p)==0)
            {
                nwords[i]++;
                new=false;
            }
            if(new)
            {
                strcpy(words[count],p);
                ++nwords[count++];
            }
            new=true;
       

    }
   

    for(int i=0;i<count;i++)
    {
        if((i+1)%2==0)
            printf("\n");
        printf("%-13s %3d ",words[i],nwords[i]);
    }
    printf("\n");
    return 1;
}























2016-08-03 17:42
快速回复:计算文本中各个单词的字数并输出(代码我重写了一遍,但发现执行后会输 ...
数据加载中...
 
   



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

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