gpt4 book ai didi

c - 如何正确计算 C 中的单词、换行符和字符

转载 作者:行者123 更新时间:2023-11-30 15:24:48 25 4
gpt4 key购买 nike

为了完成家庭作业,我正在 Linux 上实现 wc 的递归版本。其格式如下所示:

new_line_count word_count character_count file_name

我在遍历和从目录中抓取每个文件时没有遇到问题,也没有在实际读取文件时遇到任何问题。当尝试正确计算单词、字符和换行符时,我的问题就出现了。

为了计算这些内容,我创建了三个全局变量(在读取整个文件后重置),然后使用 switch 语句来计算所有内容:

#define SPACE 32
#define NEW_LINE 10
#define VERT_TAB 11
#define C_RETURN 13

unsigned int new_line = 0;
unsigned int word_count = 0;
unsigned int char_count = 0;

void check_wc(int i, char *file_name)
{
switch(i)
{
case SPACE:
char_count++;
word_count++;
break;
case NEW_LINE:
case VERT_TAB:
case C_RETURN:
char_count++;
word_count++;
new_line++;
break;
default:
char_count++;
}
}

在简单文本文件上运行时,我的结果与 wc 的结果相匹配。当我在 my_wc.c 上运行程序时,问题就出现了。

这是wc的结果:

 204     471    4034 my_wc.c

这些是我的结果:

 204    1100    4034 my_wc.c

正如您所看到的,字数统计远远不够......可能是因为在换行时空格被视为一个单词。然而,当我尝试构建类似有限状态机之类的东西来检查此类特殊条件时,我的字符计数、换行符计数和字数计数仍然错误。

我遗漏了一些明显的东西吗?

最佳答案

正如其他人所说,您需要跟踪您是否在单词内:

characters = 0
words = 0
newlines = 0
in_word = false

foreach character c in file
characters++

if c == '\n'
newlines++

if isspace (c) // includes newlines
in_word = false
else
if (!in_word)
in_word = true
words++

关于c - 如何正确计算 C 中的单词、换行符和字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28226470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com