0

假设我有一个这样的字符串:aaaaaa

我有一个需要应用的转换,如下所示:aa -> b

我的问题是:

  1. 我如何(单独)找到将转换规则应用于给定字符串中的每个子字符串的结果的所有子字符串。因此,例如,在我举个例子的情况下,我需要得到以下结果字符串:

    咩咩咩咩咩咩咩咩咩咩咩咩咩

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 回答