gpt4 book ai didi

c - 在 C 中解析一个复杂的字符串

转载 作者:行者123 更新时间:2023-12-02 22:30:23 25 4
gpt4 key购买 nike

我有一个这样的字符串:

"00:00:00 000~00:02:00 0000|~00:01:00 0000;00:01:00 0000~",

我想获取每个项目,例如 "00:00:00 000"

我的思路是,先用";"分割字符串,再用"|"分割,最后用"~"

但问题是如果为null我就获取不到,比如"00:01:00 0000~""~"之后的部分,我想获取它并为其设置默认值,然后将其存储在其他地方,但代码不起作用。问题是什么?

这是我的代码:

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

char *str1, *str2, *str3, *str4, *token, *subtoken, *subt1, *subt2;
char *saveptr1, *saveptr2, *saveptr3;
int j;

for (j = 1, str1 = argv[1]; ; j++, str1 = NULL) {
token = strtok_r(str1, ";", &saveptr1);
if (token == NULL)
break;
printf("%d: %s\n", j, token);

int flag1 = 1;
for (str2 = token; ; str2 = NULL) {
subtoken = strtok_r(str2, "|", &saveptr2);
if (subtoken == NULL)
break;
printf(" %d: --> %s\n", flag1++, subtoken);
int flag2 = 1;
for(str3 = subtoken; ; str3 = NULL) {
subt1 = strtok_r(str3, "~", &saveptr3);
if(subt1 == NULL) {
break;
}
printf(" %d: --> %s\n",flag2++, subt1);
}
}
}

exit(EXIT_SUCCESS);
} /* main */

最佳答案

如果您首先使所有定界符统一,则可以简化您的算法。首先替换所有出现的 , 和 |使用 ~,那么解析会更容易。您可以通过 sed 或 vim 在外部执行此操作,也可以在 C 代码中以编程方式执行此操作。那么你应该能够很容易地得到'NULL'问题。 (就个人而言,我不喜欢使用 strtok,因为它会修改原始字符串)。

关于c - 在 C 中解析一个复杂的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12367102/

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