c - 有效地从字符串中提取标记

标签 c string

<分区>

我有当前的 C 代码:

#include <string.h> // strdup
#include <stdio.h> // printf
#include <stdlib.h> // free

int main(int argc, char *argv[])
{
  const char isostr[] = "\\ISO 2022 IR 13\\ISO 2022 IR 87";

  char *query = strdup( isostr );
  char *token;
  char *str1;
  char *saveptr1;
  const char delim[] = "\\";

  for (str1 = query; ; str1 = NULL)
    {
    token = strtok_r(str1, delim, &saveptr1);
    if (token == NULL)
      break;
    printf(" --> %s\n", token);
    }
  free( query );

  return 0;
}

然而它正在返回:

 --> ISO 2022 IR 13
 --> ISO 2022 IR 87

虽然我需要返回:

 --> [null/empty]
 --> ISO 2022 IR 13
 --> ISO 2022 IR 87

strtok_r 似乎在字符串“AA\BB\CC”和“AA\BB\CC\”或“\AA\BB\\CC”之间没有任何区别。

最佳答案

如果分隔符只有 1 个字符,则可以使用 strchr 搜索它而不是分词。 strtok 将所有分隔符作为分隔符。

str1 = query;
while (1)
{
    char * sep = strchr(str1, '\\')
    if (sep != NULL) *sep = 0;
    printf(" --> %s\n", str1);
    if (sep == NULL) break;
    str1 = sep + 1;
}

关于c - 有效地从字符串中提取标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18830329/

相关文章:

c - 从C中的文件中读取特定字符

c - 使用 execv 查找异常结果

java - 如何改进此 Java 代码以在字符串中查找子字符串?

c++ - 为什么要为 "copy on write"的 const 成员函数返回一个代理类?

c++ - 根据 S_ISREG C/C++, "regular file"是什么意思?

C malloc 从它的 typedef 结构

c - 尝试更通用的 c 代码,自定义数据结构,在双链表中,这可能吗?

python - 如何在 Pandas 中删除左右字符串中的所有 '0'

c++ - 如何在构造函数中初始化 char 数组样式的字符串

javascript - 如何用子元素替换元素内的部分文本?