说我有这样的字符串:aaaaaa
我有一个需要应用的转换,如下所示:aa -> b
我的问题是:
我如何找到所有子串(单独),这些子串是将转换规则应用于给定字符串中的每个子串的结果。因此,例如,在我作为示例的情况下,我需要得到以下结果字符串:
baaaa, abaaa, aabaa, aaaba, AAAAB
答案 0 :(得分: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)
}
}