我有一个格式为“ABCDEFG,12:34:56:78:90:11”的字符串。我想将这两个用逗号分隔的值分成两个不同的字符串。我如何使用c语言在gcc中做到这一点。
答案 0 :(得分:7)
一种可能性是这样的:
char first[20], second[20];
scanf("%19[^,], %19[^\n]", first, second);
答案 1 :(得分:3)
char str[] = "ABCDEFG,12:34:56:78:90:11"; //[1]
char *first = strtok(str, ","); //[2]
char *second = strtok(NULL, ""); //[3]
[1] ABCDEFG,12:34:56:78:90:11 [2] ABCDEFG\012:34:56:78:90:11 Comma replaced with null character with first pointing to 'A' [3] Subsequent calls to `strtok` have NULL` as first argument. You can change the delimiter though. Note: you cannot use "string literals", because `strtok` modifies the string.
答案 2 :(得分:3)
有很多人建议strtok
......为什么? strtok
是编程的石器时代的遗留问题,仅适用于20行实用程序!
每次调用strtok都会通过在该调用返回的标记之后插入空字符来修改strToken。 [...] [F] unction使用静态变量将字符串解析为标记。 [...]交错调用此函数极有可能产生数据损坏和不准确的结果。
scanf
,就像Jerry Coffin的answer一样,是一个更好的选择。或者,您可以手动执行:使用strchr
查找分隔符,然后将部件复制到单独的缓冲区。
答案 3 :(得分:1)
您可以使用strtok来指定分隔符并为您生成代币。
答案 4 :(得分:1)
您可以使用 strtok :
来自cppreference.com的示例:
char str[] = "now # is the time for all # good men to come to the # aid of their country";
char delims[] = "#";
char *result = NULL;
result = strtok( str, delims );
while( result != NULL ) {
printf( "result is \"%s\"\n", result );
result = strtok( NULL, delims );
}
答案 5 :(得分:-1)
尝试使用以下正则表达式,它会找到任何字符a-z A-Z后跟一个“,”
“[A-Z] ,”如果您还需要小写字母,请尝试“[a-zA-Z] ,”
如果您需要先搜索第二部分,可以尝试以下
”,[0-9] {2}:[0-9] {2}:[0-9] {2}:[0-9] {2}:[0-9] {2}: [0-9] {2}“
有一个关于如何使用REGEX的例子 http://ddj.com/184404797
谢谢, V $ H3R