0

Cで文字列を分割する必要があります。使用できることはわかっていますstrtokが、使用方法がよくわかりません。

たとえば、これを分割したい: 'L' を取​​得し、 (コンマ)"L 90,120,130,140"で区切られた整数を取得したい。,

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

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 に答える
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 に答える