我正在尝试将所有整数放在一个数组中,它们之间有分隔符
我期待看到什么
array[0][0] = 0
array[0][1] = 1
array[1][1] = 2
array[2][1] = 3
array[0][2] = 4
我试过重用令牌 = strtok( str, ";" (,但它删除了字符"4">
#include <stdio.h>
#include <string.h>
int main()
{
char seps[] = " ,tnr";
char *token;
char str[1000] = "0,1;2;3,4";
int kk=0;
int array[3][10];
token = strtok( str, seps );
while(1){
sscanf(token,"%d",&(array[0][kk]));
printf("Print Token %dn",array[0][kk]);
//If token has ; move to next place in 1st array
token = strtok( NULL, seps );
kk++;
if (token==NULL)
break;
}
return 0;
}
并非所有分隔符都包含在数组seps
中。
同时循环也应该写成
token = strtok( str, seps );
while( token != NULL )
{
// ...
++kk;
token = strtok( NULL, seps );
}
这是一个演示程序
#include <stdio.h>
#include <string.h>
int main( void )
{
const char seps[] = " ;,tnr";
char *token;
char str[1000] = "0,1;2;3,4";
int array[3][10];
size_t i = 0;
token = strtok( str, seps );
while ( token != NULL )
{
sscanf( token, "%d", &array[0][i] );
printf( "%d ", array[0][i] );
++i;
token = strtok( NULL, seps );
}
return 0;
}
它的输出是
0 1 2 3 4
用strtok
做到这一点,至少不容易,因为strtok
会擦除它找到的任何分隔符,而没有任何指示它们是什么。因此,涉及区分不同类型的分隔符的问题不适合strtok
。
,然后检查匹配字段后面的分隔符。(您可能还想跳过空格,但这只是一个简单的修改。
如果你正在寻找数字,你会发现strtol
(或strtod
浮点(非常有用,因为它既可以提取数字,又可以告诉您数字的结束位置。然后,您可以在指示的端点处检查该字符,并在之后的下一个字符处重新启动扫描。