解析一个字符串
我有一个格式为“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