c - 为什么我的 wc 实现给出了错误的字数?

标签 c linux string algorithm wc

这是一个小代码片段。

 while((c = fgetc(fp)) != -1)
    {
        cCount++; // character count
        if(c == '\n') lCount++; // line count
        else 
        {
            if(c == ' ' && prevC != ' ') wCount++; // word count
        }
        prevC = c; // previous character equals current character. Think of it as memory.
    }

现在,当我使用包含上述片段代码的文件运行 wc(按原样)时,我得到 48 个单词,但是当我对相同的输入数据使用我的程序时,我得到 59 个单词.

如何像wc一样计算字数?

最佳答案

您将任何不是空格的内容都视为有效单词。这意味着换行符后跟一个空格是一个单词,并且由于您的输入(即您的代码片段)是缩进的,所以您会得到一堆额外的单词。

你应该使用 isspace检查空格而不是将字符与 ' ' 进行比较:

while((c = fgetc(fp)) != EOF)
{
    cCount++;
    if (c == '\n')
        lCount++;
    if (isspace(c) && !isspace(prevC))
        wCount++;
    prevC = c;
}

关于c - 为什么我的 wc 实现给出了错误的字数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47076576/

相关文章:

c - 如何在不使用结构体的情况下在一个函数中返回两个值?

c - 传递结构指针的问题和 "conflicting types"错误

c++ - 如何读取视频元数据(C/C++)?

Python Cleaner 获取字符串中所有子字符串的方法

c++ - 解析 URL 字符串以删除不需要的内容 (C++)

c - 无法将字符串保存到指向数组的指针中

linux - vim 中多行注释不起作用

mysql - 更改mysql数据库的位置

c - 如何在C中将二进制字符串转换为二进制补码和IEEE

c - Scanf 在 C 中跳过每隔一个 while 循环