解析一个字符串

时间:2010-04-22 23:00:35

标签: c string parsing

我有一个格式为“ABCDEFG,12:34:56:78:90:11”的字符串。我想将这两个用逗号分隔的值分成两个不同的字符串。我如何使用c语言在gcc中做到这一点。

6 个答案:

答案 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

相关问题