alstom 发表于 2018-9-26 05:18:17

统计字符串有几个单词的程序

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

#define MAX 1024

int main()
{
      char str;
      char ch;
      int i, n, r = 1, c = 0, mc = 0;
//      char result;

      printf("请输入一个英文句子:");

      while((ch = getchar()) != '\n')
      {
                str = ch;
                i++;
      }

      n = strlen(str);

      for (i = 0; i < n; i++)
      {
                if (str == ' ')
                {
                        r++;

                        if (mc < c)
                        {
                              mc = c;
                        }
                        c = 0;
                        continue;
                }
                c++;
      }
      printf("%d,%d\n", r, mc );

      return 0;
}


这个程序目前的功能是输入一段话,根据空格来判断单词数和最长单词长度,运行结果会报segmentation fault
请大神帮忙看看是什么问题! 谢谢!

小腿跑乱刀 发表于 2018-9-26 05:18:18

本帖最后由 小腿跑乱刀 于 2018-9-26 13:39 编辑

主要原因在于for循环中的if语句,
你的代码是每当遇到一个空格就会进行一次比较,
但是,当输入一系列单词后,最后的一个单词往往是不添加空格而是直接回车的,
这意味着你输入的最后一个单词实际上根本没有进行比较,也就没有纳入统计的结果之中。

当然除了这一个问题还有其他的一些问题需要你自己再思考着改改,比如你的变量r统计的是单词的个数吧,在还没有统计的时候单词个数应该为0,而你将其初始化为了1。
但恰巧就像我前面说的你的程序忽略了输入的最后一个单词,这反而造成了单词个数的统计结果是正确的(但实际上做法是错误的)。

我去上课前大概写了下,参考一下吧,可能也有错
#include <stdio.h>

#define IN 1
#define OUT 0

int main(int argc, char **argv)
{
    int num_word = 0, maxlen = 0, count = 0;
    int state = OUT;
    char c;
   
    int flag;

    while((c = getchar()) != '\n')
    {
      flag = (c == ' ' | c == '\t');
      if(!flag & state == OUT)
      {
            state = IN;
            num_word++;
            count++;
      }
      else if(!flag & state == IN)
      {
            count++;
      }
      else if(flag & state == IN)
      {
            if(count > maxlen) maxlen = count;
            state = OUT;
            count = 0;
      }
    }
    if(count > maxlen) maxlen = count;
    printf("num_word:%dmaxlen:%d\n", num_word, maxlen);
    return 0;
}

另外你是统计一句话的单词数,所以我给while的判断条件是不等于'\n',如果要统计一段话的单词书只需要不等于EOF或者不等于一个负整数就行了

alstom 发表于 2018-9-26 05:42:05

本帖最后由 alstom 于 2018-9-26 05:46 编辑

发现了 是 int i = 0。。
但是出来的结果好像还是不对

wjp 发表于 2018-9-26 07:30:31

n = strlen(str);你这里计算的是字符串长度,但是你前面getchar()输入的只是单个的字符
页: [1]
查看完整版本: 统计字符串有几个单词的程序