gpt4 book ai didi

c - 为什么我的 wc 实现差了一个字?

转载 作者:太空宇宙 更新时间:2023-11-04 01:15:52 25 4
gpt4 key购买 nike

[已解决] 编写解析代码是一个陷阱。一行有 15 个空格将有 15 个单词。空白行也算作一个单词。对我来说回到 flex 和 bison。

#include        <stdio.h>                         
#include <stdlib.h>

int main(int argc, char *argv[]) {

FILE *fp = NULL;
int iChars =0, iWords =0, iLines =0;
int ch;

/* if there is a command line arg, then try to open it as the file
otherwise, use stdin */

fp = stdin;
if (argc == 2) {
fp = fopen(argv[1],"r");
if (fp == NULL) {
fprintf(stderr,"Unable to open file %s. Exiting.\n",argv[1]);
exit(1);
}
}

/* read until the end of file, counting chars, words, lines */
while ((ch = fgetc(fp)) != EOF) {
if (ch == '\n') {
iWords++;
iLines++;
}

if (ch == '\t' || ch == ' ') {
iWords++;
}

iChars++;
}

/* all done. If the input file was not stdin, close it*/
if (fp != stdin) {
fclose(fp);
}

printf("chars: %d,\twords: %d,\tlines: %d.\n",iChars,iWords,iLines);
}

测试数据 foo.sh

#!/home/ojblass/source/bashcrypt/a.out
This is line 1
This is line 2
This is line 3

ojblass@linux-rjxl:~/source/bashcrypt> wc foo.sh

5 13 85 foo.sh

ojblass@linux-rjxl:~/source/bashcrypt> a.out foo.sh

chars: 85, words: 14, lines: 5.

最佳答案

你的算法是错误的。如果您在测试文件中有 2 个连续的空白字符,则单词计数器将递增两次,但它应该只递增一次。

一个解决方案是记住最后读取的字符。如果读取的字符是一个特殊字符(空白、换行、...)并且前一个字符是字母数字,那么您将增加单词的计数器。

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

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