1

文字列内のパターンを見つけて、存在する場合は削除しようとしています。と遊んできましたstrtok(aString, "$%");

これにより、またはaStringが見つかったときに分割されます。文字列内でのみ見つかった場合に分割するにはどうすればよいですか?$%"$%"

4

2 に答える 2

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;
}
于 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 に答える