用C中的任何空格分隔字符串

时间:2015-06-29 01:09:33

标签: c string token whitespace tokenize

我有一个字符串,例如“123 789”,我想要的结果是将此输出的字符串分开:

123 
789

我创建了完成此操作的代码,通过查找空格来分隔字符串。

我需要帮助编辑我的代码,以便通过回车符,换行符,垂直制表符,自由格式制表符或一系列空格来分隔字符串。基本上,任何空白字符。目前,如果除了单个空格以外的任何内容分隔字符串的不同部分,我的代码就会中断。

这是我的代码,目前用一个空格分隔:

int counter = 0; //counter used in loop
int index = test->current_index; //holds the current index of my string, it's initially 0
char *string = test->myString; //holds the whole string

char token_buffer = string[index];

//before loop: index = 0, counter = 0

while(test->current_index <= test->end_index)
{
    counter = 0;
    token_buffer = string[counter+index];
    while(token_buffer != ' ' && (index+counter)<=test->end_index)
    {
        counter++;
        token_buffer = string[index+counter];
    }

    char *output_token = malloc(counter+1);
    strncpy(output_token,string+index,counter);
    printf("%s \n", output_token);
    TestProcessing(output_token); //sends each token to be processed further

    //update information
    counter++;   
    test->current_index += counter;
    index += counter;
    return 0;
}

3 个答案:

答案 0 :(得分:1)

通过包含<ctype.h>并将token_buffer != ' '替换为!isspace(token_buffer),似乎可以最轻松地修改此代码以满足您的要求。

或者,您可以通过调用strcspn(来自<string.h>)替换整个循环。

答案 1 :(得分:1)

要定义这样的util函数,

int is_delimiter(char c)
{
    char delimiters[] = {'\0','\n','\r',' '};//customize to expand  
    for(int i = 0; i < sizeof(delimiters); i++){
         if(delimiters[i] == c)
            return 1;
    }
    return 0;
}

然后,

while(!is_delimiter(token_buffer) && (index+counter)<=test->end_index)

答案 2 :(得分:0)

关于分隔字符串的最简单方法是使用strtokstrsepstring.h):

#include <stdio.h>
#include <string.h>

int main (void) {

    char string[] ="123 789";
    char *p = NULL;

    for (p = strtok (string, " "); p; p = strtok (NULL, " \n"))
        printf (" %s\n", p);

    return 0;
}

<强>输出

$ ./bin/strtok_min
 123
 789

注意:原始字符串未被保留,因此如果您以后需要原创,请复制。