我是C编程的新手,我目前正在尝试自学如何创建一个C程序,该程序可以计算输入流中的单词和行数,并将两个总计打印到标准输出中。
我试图做的是让程序计算行数并计算输入流中的单词数。我想让程序包含单词,但要排除空格、制表符、换行符、连字符或冒号。同时让程序将结果(单词和行)输出为小数。
#include<stdio.h>
int main()
{
int iochar;
int words;
int lines;
printf("Enter something here:nn");
while ((iochar = getchar ()) !=EOF)
{
if((iochar == ' ') || (iochar == 't') || (iochar == 'n'))
putchar(iochar);
}
return 0;
}
我想让程序输出十进制,它计入标准输出的单词和行的值。这似乎对我不起作用。
当读取值为 n
时,您必须递增 lines
的值。要计算字数,您可以看到这些解决方案。
您也可以使用wc
程序(UNIX)...
尝试使用 switch
语句而不是 if
,并添加一些计数逻辑:
int wordLen = 0;
while (...) {
switch(iochar) {
case 'n':
lines++; // no "break" here is intentional
case 't':
case ' ':
words += (wordLen != 0);
wordLen = 0;
break;
default:
wordLen++;
break;
}
}
if (wordLen) words++;
有一个K&R章节详细介绍了这个练习,请参阅第1.5.4节字数统计。
阅读标准库函数isspace
和ispunct
; 这比对各种字符值进行显式测试更容易(并且它考虑了语言环境)。
将words
和lines
初始化为 0,然后在检查输入时更新它们:
if (isspace(iochar) || ispunct(iochar) || iochar == EOF)
{
if (previous_character_was_not_space_or_punctuation) // you'll have to figure
{ // out how to keep track
words++; // of that on your own
}
if (iochar == 'n')
{
lines++;
}
}
正如 AK4749 提到的,您没有任何计数代码。
同样在 if 语句中,仅当字符是空格、制表符或换行符时,才将字符输出到 stdout。我相信你想要相反的。
我会尝试如下方法:
#include "stdio.h"
int main()
{
int iochar, words,lines;
words=0;
lines=0;
printf("Enter something here:nn");
while ((iochar = getchar ()) !=EOF)
{
if((iochar == ' ') || (iochar=='t'))
words++;
else if (iochar == 'n')
lines++;
else
{
putchar(iochar);
}
}
printf("Lines: %d, Words: %d", lines, words);
return 0;
}
我没有尝试编译这个,但它应该不会太远。
希望对您有所帮助,莱夫特里斯