我试图在字符串中找到一个模式,如果它存在就将其删除。我一直在玩strtok(aString, "$%");
aString
当它找到$
or时,这将分解%
。"$%"
当它只在字符串中找到时,我如何让它分解?
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;
}
抱歉跑题了。
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;
}