gpt4 book ai didi

c - 在 C 中分割从文件读取的字符串很困难

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

我需要从文件中读取输入,然后从其定义中拆分大写的单词。我的问题是,我需要文件中的多行位于一个变量中才能将其传递给另一个函数。我想读取的文件如下所示

消色差。一个光学术语,适用于那些望远镜,其中光线的像差以及与之相关的颜色是部分修正。 (参见 APLANATIC。)

不定期。一个古老的术语,象征着天国的崛起日落时的尸体,或日出时的尸体。

跨越潮流。一艘船在潮汐中航行,在风中潮汐方向,会趋于 anchor 的下风方向;但有一个天气潮,或者说逆风奔跑,如果潮水很强,会趋于迎风。航行中的船舶应选择以下航向当 anchor 被固定时,风穿过溪流阻止潮水放手吧。

现在,我的代码将单词与其余部分分开,但我很难将其余输入放入一个变量中。

while(fgets(line, sizeof(line), mFile) != NULL){
if (strlen(line) != 2){
if (isupper(line[0]) && isupper(line[1])){
word = strtok(line, ".");
temp = strtok(NULL, "\n");
len = strlen(temp);
for (i=0; i < len; i++){
*(defn+i) = *(temp+i);
}
printf("Word: %s\n", word);
}
else{

temp = strtok(line, "\n");
for (i=len; i < strlen(temp) + len; i++);
*(defn+i) = *(temp+i-len);
len = len + strlen(temp);
//printf(" %s\n", temp);
}
}
else{
len = 0;
printf("%s\n", defn);
index = 0;
}
}

最佳答案

像这样:

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

//another function
void func(char *word, char *defs){
printf("<%s>\n", word);
if(defs){
printf("%s", defs);
}
}

int main(void){
char buffer[4096], *curr = buffer;
size_t len, buf_size = sizeof buffer;
FILE *fp = fopen("dic.txt", "r");

while(fgets(curr, buf_size, fp)){
//check definition line
if(*curr == '\n' || !isupper(*curr)){
continue;//printf("invalid format\n");
}
len = strlen(curr);
curr += len;
buf_size -= len;
//read rest line
while(1){
curr = fgets(curr, buf_size, fp);
if(!curr || *curr == '\n'){//upto EOF or blank line
char *word, *defs;
char *p = strchr(buffer, '.');
if(p)
*p++ = 0;
word = buffer;
defs = p;
func(word, defs);
break;
}
len = strlen(curr);
curr += len;
buf_size -= len;
assert(buf_size >= 2 || (fprintf(stderr, "small buffer\n"), 0));
}
curr = buffer;
buf_size = sizeof buffer;
}
fclose(fp);

return 0;
}

关于c - 在 C 中分割从文件读取的字符串很困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44339223/

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