1

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

aString当它找到$or时,这将分解%"$%"当它只在字符串中找到时,我如何让它分解?

4

2 回答 2

0

You can easily create this with 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;
}
于 2012-11-27T05:55:07.717 回答
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;
}
于 2012-11-27T06:00:14.267 回答