解析一个字符串

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

一种可能性是这样的:

char first[20], second[20]; scanf("%19[^,], %19[^\n]", first, second); 

这么多人都在暗示……为什么? strtok是编程的石器时代的遗留物,仅适用于20线电力公司!

每次调用strtok都会通过在该调用返回的标记之后插入空字符来修改strToken。 […] [F] unction使用静态变量将字符串解析为标记。 […]交错调用此函数极有可能产生数据损坏和不准确的结果。

像Jerry Coffin的回答一样 , scanf是一个更好的选择。 或者,您可以手动执行:使用strchr查找分隔符,然后将部件复制到单独的缓冲区。

 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
     逗号替换为空字符,首先指向'A'

 [3]后续调用`strtok`作为第一个参数有NULL`。
     您可以更改分隔符。

注意:你不能使用“字符串文字”,因为`strtok`修改了字符串。

您可以使用strtok来指定分隔符并为您生成标记。

你可以使用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 ); } 

尝试使用以下正则表达式,它会找到任何字符az AZ后跟一个“,”

“[AZ] ,”如果您还需要小写字母,请尝试“[a-zA-Z] ,”

如果您需要先搜索第二部分,可以尝试以下操作

”,[0-9] {2}:[0-9] {2}:[0-9] {2}:[0-9] {2}:[0-9] {2}:[O- 9] {2}”

有关如何在http://ddj.com/184404797上使用REGEX的示例

谢谢,V $ h3r