c - C中的双重拆分

标签 c string split strtok

好的。例如,我的 txt 文件中有这一行:

1|1,12;7,19;6,4;8,19;2,2
如您所见,它有 2 个部分,由 | 分隔。我可以轻松获取这两个部分,并使用 ; 分隔符分隔第二部分 1,12;7,19;6,4;8,19;2,2。但是我确实遇到了通过 , 进一步分离以获得每组的第一个和第二个数字的问题。

这是我当前的代码:

  result = strtok(result, ";");

  while(result != NULL ) {
      printf("%s\n", result);
      result = strtok(NULL, ";");
  }

它输出我:

1,12
7,19
6,4
8,19
2,2

好的,很好。但是当我尝试“strtok”时(我正在使用这种方法进行拆分) 像这样:

 result = strtok(result, ";");

 while(result != NULL ) {
     //printf("%s\n", result);
     help    = strtok(result, ",");    
     while(help != NULL) {
         printf("<%s>", help);
         help = strtok(NULL, ",");
     }

     result  = strtok(NULL, ";");
 }

我只得到“<1>,<12>”,好像这组数字只有一组。我不明白其余的数字在哪里。相反,输出应为:<1>、<12>、<7>、<19>、<6>、<4>、<8>、<19>、<2>、<2>。有人可以提供解决方案,如何获得每组这组数字的每个数字。也许还有其他方法或者我做错了什么:)

谢谢!

最佳答案

除了 Neil 指出的关于修改原始字符串的内容之外,strtok() 函数并未设计为像您描述的那样以嵌套方式使用。您可能希望研究 strtok_r() 函数,或者完全避免使用 strtok* 系列。

关于c - C中的双重拆分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2612900/

相关文章:

c - 如何为双指针分配内存并且它应该在 f1、f2 和 f3 中可见?

c - 使用 getchar() 存储数字

c - 将文件指针传递给函数,但文件未被正确读取

c - Valgrind : Invalid read/write of size 1 Ask

javascript regExp检查最后一个字符

c++ - C++中的拆分函数

java - 我将如何在 Java 中拆分一个句子

python - 创建 numpy 数组时 dtype=object 是什么意思?

java - 线程 "main"java.lang.StringIndexOutOfBoundsException : String index out of range: 10 中的异常

java - 如何将 String.split 与文本文件一起使用以添加到简单数组