为什么我的字数不正确?

Why is my character count incorrect?

获取字数的代码如下:

int count = 0;
for (int i = 0; chars[i] != EOF; i++)
{
    if (chars[i] == ' ')
    {
         count++;
    }
}

我的问题是,它没有正确计算字数。

例如,如果我的 file.txt 中包含以下文本:

spaced-out there's I'd like

它说我有 6 words,而根据 MS Word 我有 4

spaced-out and in

给我的字数是 4

spaced out and in

给我的字数是 6

很抱歉,如果这个问题之前已经回答过,Google在搜索时没有考虑到特殊字符,所以很难找到编码的答案。我最好通过确定它是否是 space 来获得这些词。

我尝试寻找答案,但似乎没有人遇到完全相同的问题。我知道 .txt 文件可能以 Windows 中的 /r/n 结尾,但那应该是一个词的一部分。例如:

spaced out and in/r/n

我相信它应该还是给我 4 字。另外,当我将 || chars[i] == '\n' 添加为:

for (int i = 0; chars[i] != EOF || chars[i] == '\n'; i++)

我得到更多的单词,8

spaced out and in

我在基于 Linux 的服务器上执行此操作,但在 Windows 上的 SSH 客户端上执行此操作。这些字符来自 .txt 文件。


编辑:好的,这是代码,我在发布时避免了 #include

#define BUF_SIZE 500            
#define OUTPUT_MODE 0700        

int main(int argc, char *argv[])
{
    int input, output;
    int readSize = 1, writeSize;            
    char chars[BUF_SIZE];   
    int count = 0;

    input = open(argv[1], O_RDONLY);                

    output = creat(argv[2], OUTPUT_MODE);   

    while (readSize > 0)                
    {
        readSize = read(input, chars, BUF_SIZE); 
        if (readSize < 0)       
        exit(4);

        for (int i = 0; chars[i] != '[=12=]'; i++)
        {
            if (chars[i] == ' ')
            {
                count++;
            }
        }

        writeSize = write(output, chars, readSize);     
        if (writeSize <= 0)             
        {
            close(input);       
            close(output);
            printf("%d words\n", count);
            exit(5);
        }
    }
}

我写这个答案是因为我想,我知道你的困惑是什么。但是请注意,你没有解释你是如何读取文件的,我会举个例子来解释为什么我们测试 != EOF,这不是你从文件中读取的字符。

您似乎认为 EOF 是一个存储在文件中的字符,但事实并非如此。如果你只是想计算单词数,你可以这样做

int chr;
while ((chr = fgetc(file)) != EOF)
    count += (chr == ' ') ? 1 : 0;

请注意 chr 必须是 int 类型,因为 EOFint 类型,但它肯定不存在于文件中!它由 fgetc() 等函数 return 编辑,表示没有更多内容可读,请注意,必须尝试阅读才能 return 它。

糟糕,另请注意,我的示例代码不会计算最后一个单词。但那是你要弄清楚的。

此外,这会将多个空格计为“words”,您也应该锻炼一下。