我正在尝试将所有整数放在一个带有分隔符的数组中
我希望看到的
array[0][0] = 0
array[0][1] = 1
array[1][1] = 2
array[2][1] = 3
array[0][2] = 4
我尝试过重用token = strtok(str,“;”),但是它删除了char“ 4”
#include <stdio.h>
#include <string.h>
int main()
{
char seps[] = " ,\t\n\r";
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 %d\n",array[0][kk]);
//If token has ; move to next place in 1st array
token = strtok( NULL, seps );
kk++;
if (token==NULL)
break;
}
return 0;
}
答案 0 :(得分:0)
并不是所有的分隔符都包含在数组seps
中。
另外,while循环应写为
token = strtok( str, seps );
while( token != NULL )
{
// ...
++kk;
token = strtok( NULL, seps );
}
这是一个演示程序
#include <stdio.h>
#include <string.h>
int main( void )
{
const char seps[] = " ;,\t\n\r";
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
答案 1 :(得分:0)
使用strtok
至少不能轻易做到这一点,因为strtok
会删除找到的所有定界符而没有任何指示。因此,涉及区分不同类型的定界符的问题不适合strtok
。
我建议您尝试一种尝试匹配要提取的字段的方法,然后检查匹配字段后的定界符。 (您可能也想跳过空格,但这是一个简单的修改。)
如果您要查找数字,您会发现strtol
(对于浮点数,则为strtod
),因为它既可以提取数字,又可以告诉您数字的结尾。然后,您可以在指示的端点检查字符,然后在此之后的下一个字符重新开始扫描。