【问题标题】:C strtok is not tokenizing empty token value [duplicate]C strtok没有标记空标记值[重复]
【发布时间】:2017-03-31 13:55:21
【问题描述】:

我有一个使用strtok 的小程序,如下所示:

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

int main ()
{
  char str[] ="1,2,,3,4,5";
  char * pch;
  printf ("Splitting string \"%s\" into tokens:\n",str);
  pch = strtok (str,",");
  while (pch != NULL)
  {
    printf ("%s\n",pch);
    pch = strtok (NULL, ",");
  }
  return 0;
}

我的输出如下:

Splitting string "1,2,,3,4,5" into tokens:
1
2
3
4
5

但是当我遇到连续的分隔符,, 时,我需要将空值作为空字符串,例如在这种情况下。 IE。我需要输出为: 将字符串 "1,2,,3,4,5" 拆分为标记:

1
2

3
4
5

有什么办法吗?

【问题讨论】:

  • "1,2,,3,4,5" ---> "1,2, ,3,4,5" 没有简单的方法可以做到这一点。您必须检查 strtok 返回的地址并检查差异是否 == 1。
  • 按照@FredLarson 的链接建议使用strpbrk
  • 这是正确的行为。只需检查strlen(pch),如果为零则忽略它。

标签: c tokenize strtok


【解决方案1】:

这就是strtok() 的行为方式。引用man page

解析字符串中两个或多个连续分隔符字节的序列被认为是单个分隔符。 [...]

您可以使用strchr()strpbrk() 找出每个分隔符的出现并分别计数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多