Peter_shuai 发表于 2013-12-10 20:55:49

谭浩强C语言书中的一个小问题

输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。
#include<stdio.h>
void main()
{
    char string;
    int i,num=0,word=0;
    char c;
    gets(string);
    for(i=0;(c=string)!='\0';i++)
    {
      if(c==' ') word=0;
      else if(word==0)
         {
               word=1;
               num++;
         }
    }
    printf("There are %d words in the line.",num);
}

对这段代码中的word这个变量理解不好,这个程序必须要这么写吗?有没有简单好懂的代码

SXDA 发表于 2013-12-10 21:02:32

word是用来区分空格的,我觉得吧word改成space还比较好理解。
如果字符串只有单词和空格的话,干嘛不直接统计空格的个数,单词数不就是空格数+1吗?

maomingkun 发表于 2013-12-10 21:24:07

#include<stdio.h>
void main()
{
    char string;
    int i,num=0,word=0;
    char c;
    gets(string);
    for(i=0;(c=string)!='\0';i++)//如果字符没有结束
    {
      if((c>=32 && c<=47) ||( c>=58 && c<=64 )||( c>=91 && c<=96 )||( c>=123 && c<=126))
                {//这是符号的ascii码,比如逗号、句号、问号、感叹号等等!
                        num++;
                }
    }
    printf("There are %d words in the line.",num);
}

maomingkun 发表于 2013-12-10 21:25:56

SXDA 发表于 2013-12-10 21:02 static/image/common/back.gif
word是用来区分空格的,我觉得吧word改成space还比较好理解。
如果字符串只有单词和空格的话,干嘛不直接统 ...

那如果是这句话呢?
Hi,Tom!没有空格,加1的话就会打印出有一个单词!

SXDA 发表于 2013-12-10 21:31:33

maomingkun 发表于 2013-12-10 21:25 static/image/common/back.gif
那如果是这句话呢?
Hi,Tom!没有空格,加1的话就会打印出有一个单词!

哦哦,也是,要考虑符号
if((c>=32 && c<=47) ||( c>=58 && c<=64 )||( c>=91 && c<=96 )||( c>=123 && c<=126))
                {//这是符号的ascii码,比如逗号、句号、问号、感叹号等等!
                        num++;
                }
这句改成if(!(('a'<=c && c<='z') || ('A'<=c && c<='Z')))
                {//这是符号的ascii码, 比如逗号、句号、问号、感叹号等等!
                        num++;
                }
是不是直观点

maomingkun 发表于 2013-12-10 22:18:22

对啊,就是这个意思,我就是大致说了一下思路,没有具体简化代码,:lol:

pcfate 发表于 2013-12-11 13:46:29

我就看看   不说话!!!!!!!!!!!!!!!!!!!!!
页: [1]
查看完整版本: 谭浩强C语言书中的一个小问题