以下代码获取字数:
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没有考虑搜索中的特殊字符,因此很难找到编码的答案。我最好只是通过识别它是否是一个空格来说明。
我尝试寻找答案,但似乎没有人确切地遇到同样的问题。我知道.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] != '\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);
}
}
}
答案 0 :(得分:4)
我写这个答案是因为我想,我知道你的困惑是什么。但请注意,您没有解释如何阅读文件,我将举例说明为什么我们测试!= EOF
,这不是您从文件中读取的字符。
您认为EOF
是存储在文件中的字符,但事实并非如此。如果您只想计算单词,可以执行类似
int chr;
while ((chr = fgetc(file)) != EOF)
count += (chr == ' ') ? 1 : 0;
请注意,chr
必须属于int
类型,因为EOF
的类型为int
,但它肯定不存在于文件中!它由fgetc()
之类的函数返回,表示没有其他内容可读,请注意必须尝试读取才能返回它。
糟糕,还要注意我的示例代码不计算最后一个单词。但那是你要弄明白的。
此外,这会将多个空格统计为“ words ”,您还应该锻炼。