【发布时间】:2018-05-29 01:15:10
【问题描述】:
#include <stdio.h>
#include <ctype.h>
int main (){
int ch;
unsigned long int charcount=0;
unsigned long int wordcount=0;
unsigned long int linecount=0;
while((ch=getchar())!=EOF){
if (ch!=' '&& ch!='\n'){
charcount++;
}
if(ch==' '|| ch=='\n'){
wordcount++;
}
if (ch=='\n'){
linecount++;
}
}
printf( "%lu %lu %lu\n", charcount, wordcount, linecount );
return 0;
}
问题是:一个调用的 C 程序计算从标准输入读取的字符、单词和行数,直到达到 EOF。 单词被定义为连续的字母序列(a 到 z,A 到 Z)和撇号(',十进制值 39),由这些范围之外的任何字符分隔。 行定义为由换行符 ('\n') 分隔的连续字符序列。 超出最后一个换行符的字符将不计入行数。
在大多数情况下,它会正确计算字数,但我认为我的字数条件不正确
【问题讨论】:
-
您的代码没有按照您在文本中所说的进行。例如,像这样的序列
将被计为 3 个单词,而实际上它是 0 个单词。 ( 不是字符,但 <..> 是字符)。你需要寻找 a-z, A-Z ' 的东西来开始一个词。你没有这样做。 -
有一些 libc 函数可以帮助您完成任务,它们位于
ctype.h您可能想查看:isalphaisspace等。 -
空格和换行符在“什么是字符”的正常规则下都是可数字符。您通常需要跟踪您是否在一个词中,并发现您何时从“在一个词中”转换为“不在一个词中”,反之亦然。你需要“一言以蔽之”开始。将 '
a1b2c3d' 计为 4 个单词有点不寻常,但你的规则说这就是应该发生的事情——你的代码没有注意到这种可能性。
标签: c