C语言 使用带有不同分隔符的令牌



我正在尝试将所有整数放在一个数组中,它们之间有分隔符

我期待看到什么

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浮点(非常有用,因为它既可以提取数字,又可以告诉您数字的结束位置。然后,您可以在指示的端点处检查该字符,并在之后的下一个字符处重新启动扫描。

最新更新