【发布时间】:2018-07-31 05:07:03
【问题描述】:
以下代码获取字数:
int count = 0;
for (int i = 0; chars[i] != EOF; i++)
{
if (chars[i] == ' ')
{
count++;
}
}
我的问题是,它没有正确计算单词。
例如,如果我的file.txt 中包含以下文本:
它说我有6 words,而根据MS Word我应该有4。
给我4的字数。
给我6的字数
对不起,如果这个问题之前已经回答过,谷歌没有考虑搜索中的特殊字符,所以很难找到编码的答案。我最好只通过识别它是否是空格来获得单词。
我尝试寻找答案,但似乎没有人遇到完全相同的问题。我知道.txt 文件在Windows 中可能以/r/n 结尾,但那应该是一个词的一部分。例如:
我相信它仍然应该给我4的话。另外,当我将|| chars[i] == '\n' 添加为:
for (int i = 0; chars[i] != EOF || chars[i] == '\n'; i++)
我得到了更多的词,8 代表这条线
我在基于 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] != '\0'; i++)
{
if (chars[i] == ' ')
{
count++;
}
}
writeSize = write(output, chars, readSize);
if (writeSize <= 0)
{
close(input);
close(output);
printf("%d words\n", count);
exit(5);
}
}
}
【问题讨论】:
-
我在任何时候都怀疑
chars[i] == EOF。请发布您如何填充chars。 -
EOF不是字符串中的有效字符,实际上您不会在字符串中找到它。EOF是类似fgetc的函数返回以指示文件结束的值。 -
" 单词数不正确。" --> 发布
chars和minimal reproducible example 的定义 -
@Lukali 与其描述代码,不如在问题中更好更清晰地发布它。示例输入也很有用。
-
@chux 我现在已经包含了代码,谢谢你的帮助。
标签: c linux text space word-count