gpt4 book ai didi

c - 解析带有空格的逗号分隔字符串

转载 作者:行者123 更新时间:2023-11-30 14:37:34 26 4
gpt4 key购买 nike

我需要解析一个包含两个整数和两个字符串的字符串,所有这些都用逗号分隔。字符串包含导致问题的空格。格式为整数、字符串[包括空格]、字符串[包括空格]、整数。使用 gcc、c99 标准在 Linux 上工作。

我尝试过使用各种正则表达式样式的解析方法进行解析。我的解决方案在字符串没有空格时有效,但在涉及空格时会中断。

char *line = "5,some text, some more text with spaces, 3";
int num1, num2;
char string1[max_size];
char string2[max_size];

sscanf(line, "%d,%[^,],%[^,],%d", &num1, string1, string2, &num2);

我希望变量包含:

num1 == 5;
string1 == "some text";
string2 == "some more text with spaces";
num2 == 3;

我没有收到编译错误或任何错误,但我遇到的问题是,如果有任何空格,数据就会变成垃圾。

最佳答案

这里是使用 strtok 直接重写代码:

char line[] = "5,some text, some more text with spaces, 3";
int num1, num2;
char *string1;
char *string2;

num1 = atoi(strtok(line, ","));
string1 = strtok(NULL, ",");
string2 = strtok(NULL, ",");
num2 = atoi(strtok(NULL, ","));

printf("num1 = %d\n", num1);
printf("str1 = \"%s\"\n", string1);
printf("str2 = \"%s\"\n", string2);
printf("num2 = %d\n", num2);

尽管有以下限制,但这仍然有效:

  • 我不会检查 strtok 的返回值来查看它是否过早返回 NULL(表明输入中的字段少于 4 个)
  • atoi 也没有错误处理,如果数字字段不是数字,则会悄悄返回 0
  • 总的来说,strtok 也是一个相当糟糕的函数(它的状态性非常蹩脚)
  • strtok 基本上会跳过空字段,这可能不是您想要的(如果输入行例如类似于 "12,string,,34")

尽管如此,这可能比尝试使用 sscanf 更好。

另请注意,我将 line 更改为数组,以便可以修改它,因为 strtok 会在其中插入 \0 字符来终止它标记化的字符串。 (这就是为什么 string1string2 现在可以成为指针。)

关于c - 解析带有空格的逗号分隔字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57221626/

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