C函数用于分隔字符数组中的字符串

时间:2010-11-30 22:05:53

标签: c split

我想创建一个函数来使用C中的分隔符拆分文本。 两个参数textseparator将传递给函数,函数应返回array of chars

例如,如果字符串为Hello Word of C且分隔符为white space

然后该函数应该返回,

 0. Hello 
 1. Word  
 2. of 
 3. C

作为一组字符。

有什么建议吗?

5 个答案:

答案 0 :(得分:4)

strtok不符合您的需求吗?

答案 1 :(得分:1)

正如其他人已经说过的那样:不要指望我们写下你的作业代码,但这里有一个提示: (如果你被允许修改输入字符串)想想这里发生了什么:

char *str = "Hello Word of C"; // Shouldn't that have been "World of C"???
str[5] = 0;
printf(str);

答案 2 :(得分:1)

嗯,和abelenky一样的解决方案,但没有无用的废话和混淆测试代码(当某些东西 - 比如printf - 应该写两次,我没有引入一个虚拟布尔来避免它,没有我读过的东西喜欢那个地方?)

#include<stdio.h>

char* SplitString(char* str, char sep)
{
    return str;
}

main()
{
    char* input = "Hello Word of C";
    char *output, *temp;
    char * field;
    char sep = ' ';
    int cnt = 1;
    output = SplitString(input, sep);

    field = output;
    for(temp = field; *temp; ++temp){ 
       if (*temp == sep){
          printf("%d.) %.*s\n", cnt++, temp-field, field);
          field = temp+1;
       }
    }
    printf("%d.) %.*s\n", cnt++, temp-field, field);
}

在Linux下使用gcc进行测试:

1.) Hello
2.) Word
3.) of
4.) C

答案 3 :(得分:0)

我的解决方案(解决@kriss的评论)

char* SplitString(char* str, char sep)
{
    char* ret = str;
    for(ret = str; *str != '\0'; ++str)
    {
        if (*str == sep)
        {
            *str = '\001';
        }
    }
    return ret;
}

void TestSplit(void)
{
    char* input = _strdup("Hello Word of C");
    char *output, *temp;
    bool done = false;

    output = SplitString(input, ' ');

    int cnt = 1;
    for( ; *output != '\0' && !done; )
    {
        for(temp = output; *temp > '\001'; ++temp) ; 
        if (*temp == '\000') done=true;
        *temp = '\000';
        printf("%d.) %s\n", cnt++, output);
        output = ++temp;
    }
}

在Visual Studio 2008下测试

输出:

1.) Hello
2.) Word
3.) of
4.) C

答案 4 :(得分:0)

我会推荐 strsep。它比 strtok 更容易理解,但它剖析现有字符串,使其成为标记序列。是否需要先复制由您决定。