【问题标题】:Splitting string around a character in C在C中围绕一个字符拆分字符串
【发布时间】:2014-11-12 08:31:21
【问题描述】:

我有一个像';'这样的字符或 ',' 用作原始字符串中的分隔符。我需要拆分字符串并遍历每个字符串。 例如:如果,

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

分隔符是','那么我需要类似的东西

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

该函数应使用字符串调用 4 次:"apples","mangoes","orang;","ad"。

【问题讨论】:

  • 利用strtok函数。
  • 您可能想了解strtok 函数。
  • 如果你搜索你的标题,这也是谷歌上的第一个点击
  • @JoachimPileborg char* str = "apples, mangoes , orang; ,ad"; 是字符串文字。所以 strtok 无效。它将修改字符串。
  • 如果您打算使用strtok(),请记住它会修改原始字符串。所以你可能想先复制原始字符串。 stackoverflow.com/a/2581135/1865106

标签: c string split char substring


【解决方案1】:

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;
}

【讨论】:

  • 您能否为此答案提供一些解释或演练?因为它是我投票删除它。
【解决方案2】:

在你的情况下,str 是字符串文字,你不能在上面使用strtok,因为它在 R_ONLY 部分。 而strtok 确实修改了您的str,它是字面的,会产生运行时错误(分段错误)。

如果你想拆分它,那么你必须有一个用户输入。可能是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

【讨论】:

  • char* str = "apples, mangoes , orang; ,ad"; 是字符串文字。所以 strtok 无效。它会修改字符串并导致 UB。
猜你喜欢
  • 2022-12-17
  • 2013-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多