谭浩强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这个变量理解不好,这个程序必须要这么写吗?有没有简单好懂的代码
word是用来区分空格的,我觉得吧word改成space还比较好理解。
如果字符串只有单词和空格的话,干嘛不直接统计空格的个数,单词数不就是空格数+1吗? #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);
}
SXDA 发表于 2013-12-10 21:02 static/image/common/back.gif
word是用来区分空格的,我觉得吧word改成space还比较好理解。
如果字符串只有单词和空格的话,干嘛不直接统 ...
那如果是这句话呢?
Hi,Tom!没有空格,加1的话就会打印出有一个单词! 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++;
}
是不是直观点 对啊,就是这个意思,我就是大致说了一下思路,没有具体简化代码,:lol: 我就看看 不说话!!!!!!!!!!!!!!!!!!!!!
页:
[1]