【问题标题】:Parsing with multiple delimiters, in C在 C 中使用多个分隔符进行解析
【发布时间】:2015-03-03 16:17:01
【问题描述】:

在 C 中,解析具有多个分隔符的字符串的最佳方法是什么?假设我有一个字符串 A,B,C*D 并且想要存储 ABC D 的这些值。我不确定如何优雅地处理 *,除了存储最后一个字符串 C*D 然后用* 分隔符。

如果只是A,B,C,*D,我会使用strtok() 并忽略*D 的第一个索引来获得D,但* 之前没有逗号所以我不知道@ 987654328@来了。

【问题讨论】:

  • 代码可以在包含分隔符的字符串中使用带有分隔符列表的 strtok()。 IE。 if( NULL != (pResult = strtok( targetString, "," ))) 和对于连续标记: if( NULL != strtok( NULL, "," ))) 但是,请注意 strtok当连续的分隔符没有中间字符时,() 不会在每个分隔符上停止。 IE。 for ',' 不会在 '' 上停止另外,请确保字符串以 nul 字节终止
  • @user3629249,如果它没有被终止,它实际上不是一个字符串:-)

标签: c string parsing delimiter


【解决方案1】:

您可以在strtok 中使用多个 分隔符,第二个参数是一个C 字符串,其中包含列表 的分隔符,而不仅仅是一个分隔符:

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

int main (void) {
    char myStr[] = "A,B,C*D";

    char *pChr = strtok (myStr, ",*");
    while (pChr != NULL) {
        printf ("%s ", pChr);
        pChr = strtok (NULL, ",*");
    }
    putchar ('\n');

    return 0;
}

该代码的输出是:

A B C D

【讨论】:

  • 我无法理解您的解决方案,如果您认为我为什么告诉您:倍数分隔符是如果您在一段时间内使用三个“strtok”或更多......您的示例无法解决这个问题。
  • @delive,我不确定我明白你想说什么。答案正是提供了 OP 所要求的。如果您有不同的问题,则应将其作为不同的问题提出。
猜你喜欢
  • 1970-01-01
  • 2021-11-17
  • 1970-01-01
  • 2019-06-30
  • 1970-01-01
  • 1970-01-01
  • 2020-01-25
  • 2015-03-09
  • 1970-01-01
相关资源
最近更新 更多