gpt4 book ai didi

c - 分割从文本文件中读取的长句子

转载 作者:行者123 更新时间:2023-11-30 19:04:36 25 4
gpt4 key购买 nike

我想根据任意切点将文本中的长句子分割成更小的句子。我的方法考虑空格来计算单词数。给定输入文件 input.txt 的内容:

ciao
ciao ciao
ciao ciao ciao ciao ciao ciao
ciao ciao ciao ciao
ciao ciao ciao

我期望:

ciao
ciao ciao
ciao ciao ciao
ciao ciao ciao
ciao ciao ciao
ciao
ciao ciao ciao

对于切点3

我用以下代码解决了这个问题:

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

/* MAIN */

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

FILE *inp = fopen(argv[1], "r");
char c;
int word_counter = 0;

while((c = fgetc(inp)) != EOF){

printf("%c", c);

if(isspace(c))
++word_counter;
/* Cutter */
if(word_counter == 3){
printf("\n");
word_counter = 0; /* counter to zero */
}
}

return 0;
}

返回,作为输出:

ciao

ciao ciao

ciao ciao ciao

我无法理解这种行为的原因。当满足条件时,代码是否应该简单地打印一个额外的换行符?为什么它会跳过整个句子?

最佳答案

读取换行符后,您需要将 word_counter 重置为零。

此外,如果 word_counter != 3,则将每个 c 打印两次:

printf("%c", c);  // ** here

if(isspace(c))
++word_counter;
/* Cutter */
if(word_counter == 3){
printf("\n");
word_counter = 0;
}
else
printf("%c", c); // ** and here

也许可以尝试这个(未测试):

while((c = fgetc(inp)) != EOF){

if (isspace(c) && ++word_counter == 3 ) {
printf("\n");
word_counter = 0; /* counter to zero */
continue;
}
if (c == '\n') {
word_counter = 0;
}
printf("%c", c);
}

更短:

while((c = fgetc(inp)) != EOF){

if ( (isspace(c) && ++word_counter == 3) || (c == '\n') ) {
printf("\n");
word_counter = 0; /* counter to zero */
continue;
}
printf("%c", c);
}

另请记住 isspace(c)如果c == '\n',将返回true,因此也处理\r\n的更强大的版本将是:

while((c = fgetc(inp)) != EOF){

if ( (c == ' ' || c == '\t') && (++word_counter == 3) ) {
word_counter = 0;
printf("\n");
continue;
}
if ( c == '\r' || c == '\n' ) {
word_counter = 0;
}
printf("%c", c);
}

关于c - 分割从文本文件中读取的长句子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51750538/

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