gpt4 book ai didi

c - 从具有可预测格式的字符串中提取两个子字符串

转载 作者:太空宇宙 更新时间:2023-11-04 07:35:12 25 4
gpt4 key购买 nike

我正在尝试从字符串中提取两个子字符串:

char test[] = "today=Monday;tomorrow=Tuesday";
char test1[20];
char test2[20];

sscanf(test, "today=%s;tomorrow=%s", test1, test2);

当我今天打印出来时,我得到了星期一,还有字符串的其余部分。我希望 test1 是星期一,我希望 test2 是星期二。如何正确使用sscanf?

最佳答案

关键是告诉sscanf在哪里停止。
在你的情况下,这将是分号。
如果您不指定,则 %s 表示读取直到下一个空格,正如@mkasberg 提到的那样。

#include <stdio.h>
#include <string.h>

int main() {
char *teststr = "today=Monday;tomorrow=Tuesday";
char today[20];
char tomorrow[20];

sscanf(teststr, "today=%[^;];tomorrow=%s", today, tomorrow);
printf("%s\n", today);
printf("%s\n", tomorrow);

return 0;
}

产生:

MondayTuesday

Edit:
You may find useful this alternative using strtok:

#include <stdio.h>
#include <string.h>

int main () {
const char teststr[] = "today=Monday;tomorrow=Tuesday";
const char delims[] = ";=";
char *token, *cp;
char arr[4][20];
unsigned int counter = 0;
unsigned int i;

cp = strdup(teststr);
token = strtok(cp, delims);
strcpy(arr[0], token);

while (token != NULL) {
counter++;
token = strtok(NULL, delims);
if (token != NULL) {
strcpy(arr[counter], token);
}
}

for (i = 0; i < counter; i++) {
printf("arr[%d]: %s\n", i, arr[i]);
}

return 0;
}

结果:

arr[0]: todayarr[1]: Mondayarr[2]: tomorrowarr[3]: Tuesday

关于c - 从具有可预测格式的字符串中提取两个子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9661500/

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