0

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

例如,我想拆分这个:"L 90,120,130,140"我想得到“L”,然后是用,(逗号)分隔的整数。

4

5 回答 5

2

strtok在您的:中使用多个分隔符

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

然后循环并根据需要存储它们。

于 2012-10-09T20:57:20.917 回答
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

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

于 2012-10-09T21:17:51.993 回答
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 ) ;
}
于 2012-10-09T21:03:32.160 回答
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");
于 2012-10-09T21:11:34.353 回答
0

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

于 2012-10-09T21:18:30.167 回答