Cで文字列を分割する必要があります。使用できることはわかっていますstrtok
が、使用方法がよくわかりません。
たとえば、これを分割したい: 'L' を取得し、 (コンマ)"L 90,120,130,140"
で区切られた整数を取得したい。,
で複数の区切り記号を使用します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
フロートが文字列の一部である場合、さらに改善できます
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 を使用します。
完全な例を次に示します。
#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 ) ;
}