gpt4 book ai didi

C - 如何在文本文件中分割一行并存储它们的值?

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

假设我的文本文件中有多行:

print 1
set_flag 1 2 1
find_path 7 8
print 5

我希望能够分离这些值并将其应用到我的函数中:

void print(int id) {...}
void set_flag(int a, int b, int c) {...}
void find_path(int from, int to) {...}

这就是我现在陷入困境的地方:

char str[256];
while(fgets(str, 256, filename) != NULL){
//if a line contains "set_flag" then call set_flag(int a, int b, int c)
if((strstr(str, "set_flag")) != NULL){
//retrieve the str and all individual int values
...
}
}

我在网上查了一下,找到了使用 strcmp、strstr、strtol 和 fscanf 的建议。尽管作业建议 strtol 将文本文件中的可读值转换为“正确”的数据类型。

最佳答案

您可以保存匹配子字符串的指针,然后在该子字符串的末尾插入一个 NUL ('\0') 字符,这会有效地将字符串拆分为两个单独的字符串。

但是,由于您真正需要的是匹配“set_flag”后面的字符串其余部分的位置,以便检索整数值,因此您不必这样做。相反,您可以简单地在字符串中找到该位置:

// if a line contains "set_flag" then call set_flag(int a, int b, int c)
char *p = strstr(str, "set_flag");
if (p != NULL) {
// str contains 'set_flag', which p now points to
p += strlen("set_flag");
// p now points to the rest of the string following 'set_flag'

// retrieve the individual int values from the rest of the string
... // left as an exercise, sscanf(p, ...) ...
}

此时,指针p指向您从输入读取的文本行中“set_flag”后面的字符。然后,您可以使用 sscanf() 从字符串中提取整数值(我将其作为练习留给您)。

关于C - 如何在文本文件中分割一行并存储它们的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54873556/

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