文字列内のパターンを見つけて、存在する場合は削除しようとしています。と遊んできましたstrtok(aString, "$%");
これにより、またはaString
が見つかったときに分割されます。文字列内でのみ見つかった場合に分割するにはどうすればよいですか?$
%
"$%"
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;
}