strtok基于char *(字符串)而不是单个char

时间:2012-11-27 05:23:16

标签: c string strtok

我正在尝试在字符串中找到一个模式,如果它存在则将其删除。我一直在玩strtok(aString, "$%");

这会在找到aString$时分解%。当它只在字符串中找到"$%"时,如何将其分解?

2 个答案:

答案 0 :(得分:0)

您可以使用strstr:

轻松创建此内容
char *strtok2(char *str, const char *pattern) {
    static char *save = NULL;
    if(str == NULL)
        str = save;
    if(str == NULL)
        return NULL;
    if((save=strstr(str, pattern))) {
        save[0]=0;
        save += strlen(pattern);
    }
    return str;
}

答案 1 :(得分:0)

对于偏离主题感到抱歉。

strtok不是线程安全的。并且你不能在同一部分中使用strtok来表示其他值。所以你不应该使用。 strtok并不难写在你自己身上。

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

int
main(int argc, char* argv[]) {
  char* p = "$%";
  size_t pl = strlen(p);
  char* s = "hello$%C$%language$%world";
  char* pp = s;
  while (pp && *pp) {
    char* pn = strstr(pp, p);
    if (!pn) pn = pp + strlen(pp);
    size_t l = pn - pp;
    char* ss = malloc(l + 1);
    *(ss + l) = 0;
    memcpy(ss, pp, l);

    // do something with ss
    puts(ss);

    free(ss);
    pp = pn + pl;
  }
  return 0;
}