在C中拆分字符串

时间:2012-10-09 20:52:51

标签: c string

我需要在C中拆分一个字符串。我知道我可以使用strtok,但我不确定如何使用它。

例如,我想拆分它:"L 90,120,130,140"我希望得到'L',然后是由,(逗号)分隔的整数。

5 个答案:

答案 0 :(得分:2)

strtok中使用多个分隔符:

  char str[]="L 90,120,130,140";
  char *tok;
  tok = strtok (str," ,");

然后循环并存储它们。

答案 1 :(得分:1)

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

如果浮点数是字符串的一部分,可以进一步改进

答案 2 :(得分:0)

这是一个完整的例子:

#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 ) ;
}

答案 3 :(得分: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");

答案 4 :(得分:0)

这只是对其他答案的补充。请记住,strtok()不是可重入的。如果您在线程中,请使用strtok_r。