在C中的字符周围拆分字符串

时间:2014-09-18 06:02:09

标签: c string split char substring

我有一个像'&#39 ;;'或','用作原始字符串中的分隔符。我需要拆分字符串并迭代每个字符串。 例如:如果,

char* str = "apples, mangoes , orang; ,ad";

分隔符是','那我需要像

这样的东西
while(substr!='\0') {
     func(substr);
     //some operation maybe like substr=strstr(substr)+1;
}

该函数应该用字符串调用4次:" apples","芒果","红毛; ""广告"

2 个答案:

答案 0 :(得分:0)

在您的情况下,str是字符串文字,因为它在R_ONLY部分中,您不能使用strtok。 并且strtok会修改您的str,这是文字的,会产生运行时错误(Segmentation Fault)。

如果要拆分它,则必须有用户输入。可能fgets(最喜欢的一个)。

fgets (str, SIZE, stdin);    // user input for str

仅当您有字符串的用户输入时才使用strtok功能。

char * strtok (char *string, const char *delimiter);

这就是你如何使用它。

char *buff = strtok (str, ",;");
while (buff != NULL)
{
    printf (buff);
    buff = strtok (NULL, ",;");
}

有关字符串函数的更多信息

man string

答案 1 :(得分:0)

strtok是用于在C中对字符串进行标记化的便捷工具。另请注意strtok修改原始字符串。

在你的情况下

char* str = "apples, mangoes , orang; ,ad";

这是字符串文字,它是只读的,如果您在此使用strtok,则它是未定义的行为。因此,要使用预定义的长度或数组或将此字符串复制到某个临时缓冲区,然后在临时缓冲区上应用strtok

例如

int main()
{
    char str[] = "apples, mangoes , orang; ,ad";
    char *token = strtok (str, ",;");
    while (token != NULL)
    {
        printf ("%s ",token);
        token = strtok (NULL, ",;");
    }
    return 0;
}