c - C语言中通过strtok分割字符串

标签 c string tokenize

我正在通过 strtok 分割字符串,但发生了不同的情况,例如

 *tok =strtok(string,"\r\n");

strtok 当仅找到 \r 时,它会拆分字符串而不是整个 \r\n ,我希望仅当整个字符串出现在数据 中时才拆分字符串\r\n;

最佳答案

要使用多个字符分割字符串,您可以使用 strstr循环中

只需重复调用 strstr 即可查找边界字符串的出现位置。

获得结果后,将指针前进子字符串的长度,然后再次重复搜索。

这是一个丑陋的例子,但我认为它可以满足您的需要

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

int main ()
{
  char buffer[128];
  char *str ="This is a long text \r\n with \r\nmany carriage returns,\
  I hate \r\n just this\r\n nothing else\r\n";

  char *token="\r\n";

  int l=strlen(str);
  char *start,*p;
  start=str;

  p= strstr (str,token);
  while(p)
  {
     strncpy( buffer,str, p-str);
     buffer[p-str] ='\0';

     printf("%s\n",buffer);

     str=p+strlen(token);

     if((str-start) >= l)
        break;

     p= strstr (str,token);
 }
 if(!p)
   printf("%s\n",str);
 return 0;
}

参见HERE

PS:如果有人愿意,请编辑代码,使其更好。

关于c - C语言中通过strtok分割字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18726077/

相关文章:

c - 暂停程序执行直到处理中断 - 如何实现?

c - 如何将 char* 转换为字符串?

python - if 形式出现异常 : TypeError: unhashable type: 'list' in Python nltk

c - 二维数组错误 - 使指针指向整数而不进行强制转换

c - 使用 Frama-c 测试大文件中的中间变量

将 void** 转换为 int 的二维数组 - C

python - 用python编写的代码有什么问题

c# 字符串格式化

python - 如何在 python 中将文本 block 标记为一个标记?

C++/Boost 在多个字符上拆分字符串