0

次のような文字列があるとします。aaaaaa

そして、私は次のように適用する必要がある変換を持っています:aa -> b

私の質問は:

  1. 指定された文字列の各部分文字列に変換規則を適用した結果であるすべての部分文字列を(個別に)見つけるにはどうすればよいですか。したがって、たとえば、例として挙げた場合、次の結果の文字列を取得する必要があります。

    baaaa、abaa、aaabaa、aaaba、aaaab

4

1 に答える 1

1

char *をインクリメントして、文字列をステップスルーします。文字列を前に進めるたびに、strncmpを使用して、必要なサブ文字列(aaなど)が続くかどうかを確認します。それが真であるたびに、文字列を複製し、コピーで探している文字列を置き換えます。

// str is the string
// needle is what you want to replace
// replacement is what you want to replace the needle with
for (char *p = str; *p != '\0'; p++) {
  if (strncmp(p, needle, strlen(needle)) == 0) {
    char *str_ = malloc(strlen(str)+1+strlen(replacement)-strlen(needle));
    strcpy(str_, str);
    char *p_ = p - str + str_;
    memmove(p_+strlen(replacement), p_+strlen(needle), strlen(p_)+1-strlen(replacement));
    memcpy(p_, replacement, strlen(replacement));
    // do something with str_ here (and probably free it at some point)
  }
}
于 2013-02-23T13:45:27.360 に答える