0

我是 C 编程的新手,目前正在尝试自学如何创建一个 C 程序,该程序可以计算输入流中的单词和行数并将两个总数打印到标准输出。

我要做的是让程序计算行数并计算输入流中的单词数。我想让程序包含单词,但不包括空格、制表符、换行符、连字符或冒号。让程序以小数形式输出结果(单词和行)。

#include<stdio.h>

int main()
{
int iochar;
int words;
int lines;

printf("Enter something here:\n\n");

while ((iochar = getchar ()) !=EOF)
    {
    if((iochar == ' ') || (iochar == '\t') || (iochar == '\n'))

    putchar(iochar);
    }

return 0;
}

我想让程序输出它在标准输出中计数的单词和行的值的十进制。这似乎对我不起作用。

4

4 回答 4

1

lines当读取值为 时,您必须增加 的值\n。要计算字数,您可以查看这些解决方案

您还可以使用wc程序(UNIX)...

于 2012-09-26T17:28:50.990 回答
1

尝试使用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 节字数统计

于 2012-09-26T17:29:02.473 回答
0

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

您需要将wordsand初始化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++;
  }
}
于 2012-09-26T17:33:53.347 回答
0

正如 AK4749 所述,您没有任何计数代码。

同样在 if 语句中,如果字符是空格、制表符或换行符,则仅将字符输出到 stdout。我相信你想要相反的。

我会尝试以下方法:

#include "stdio.h"

int main()
{
    int iochar, words,lines;
    words=0;
    lines=0;


    printf("Enter something here:\n\n");

    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;
}

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

希望它有帮助,左撇子

于 2012-09-26T17:36:54.247 回答