我需要在 C 中拆分一个字符串。我知道我可以使用strtok
,但我不确定如何使用它。
例如,我想拆分这个:"L 90,120,130,140"
我想得到“L”,然后是用,
(逗号)分隔的整数。
strtok
在您的:中使用多个分隔符
char str[]="L 90,120,130,140";
char *tok;
tok = strtok (str," ,");
然后循环并根据需要存储它们。
char str[]="L 90,120,130,140";
char *tok;
tok = strtok (str," ,");
while (tok != NULL) {
if (isdigit(tok[0])) {
int i = atoi(&tok[0]);
printf("number %i\n",i);
} else {
printf("string %s\n",tok);
}
tok = strtok(NULL," ,");
}
输出:
string L
number 90
number 120
number 130
number 140
如果浮点数是字符串的一部分,可以进一步改进
这是一个完整的例子:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
char str[]="L 90,120,130,140";
char *p ;
p = strtok( str, " " ) ; // p is now pointer to 'L\0'
printf( "first token: %s\n", p ) ;
while( p = strtok( NULL, "," ) ) printf( "next token: %s\n", p ) ;
exit( 0 ) ;
}
strtok 会破坏你的字符串,你应该使用 sscanf 代替:
char s[2];
int a,b,c,d;
if( sscanf("L 90,120,130,140","%1s%d,%d,%d,%d",s,&a,&b,&c,&d)==5 )
puts("reading was OK");
这只是对其他答案的补充。请记住 strtok() 是不可重入的。如果您在线程中,请使用 strtok_r。