C语言 如何计算输入流中的单词和行数



我是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节字数统计

您需要

阅读标准库函数isspaceispunct; 这比对各种字符值进行显式测试更容易(并且它考虑了语言环境)。

您需要

wordslines初始化为 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;
}

我没有尝试编译这个,但它应该不会太远。

希望对您有所帮助,莱夫特里斯

相关内容

  • 没有找到相关文章

最新更新