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

程序代码:
#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
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:10 
一个括号放错了地方

程序代码:
#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] = {0};                    //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;
        }

    }    //这里要等while循环将所有字符找出来
        //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-08-03 10:29
captain2050
Rank: 2
等 级:论坛游民
帖 子:57
专家分:43
注 册:2016-7-15
收藏
得分:0 
回复 2楼 grmmylbs
二楼的同胞啊。。。这程序里那么多括号!!
麻烦你告诉我是哪个括号写错了啊??
谢谢
2016-08-03 10:36
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:0 
代码贴了,也加了注释
倒数第二个}
2016-08-03 10:41
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
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:0 
2楼我给你改过了, char text[TEXT_LEN] = {0};                    //store the whole text
要仔细啊!
2016-08-03 17:52
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
楼主用的是什么软件?不能把主动关键字特殊标示吗?从134开始出现错误都是关于new关键字的,我把你变量名改了,已能顺利编译。
图片附件: 游客没有浏览图片的权限,请 登录注册

像我用的Dev C++,直接看颜色就知道那是个保留字不能用作变量命名
程序代码:
#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 newFlag=true;//<-new 是一个关键字,具体作用请百度
    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]++;
                newFlag=false;
            }
            if(newFlag)
            {
                strcpy(words[count],p);
                ++nwords[count++];
            }
            newFlag=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:54
快速回复:计算文本中各个单词的字数并输出(代码我重写了一遍,但发现执行后会输 ...
数据加载中...
 
   



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

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