我需要一个递归代码的想法,该代码将删除字符串中的特定字符,并将所有其他字符串一起移动
例如 :
“天气多云”
输入的字符为“ e”:
结果:
“沃斯多云”
我真的不知道如何开始,谢谢您的帮助。
#include <stdio.h>
void remove_impl(char* s, char c, char* d) {
if (*s != c) {
*d++ = *s;
}
if (*s != '\0') {
remove_impl(++s, c, d);
}
}
void remove(char* s, char c) {
remove_impl(s, c, s);
}
int main() {
char s[] = "the weather is cloudy";
remove(s, 'e');
puts(s);
}
这个怎么运作?考虑一下remove_impl
。s
是原始字符串,c
是要从中删除的字符s
,d
是生成的字符串,其中写入s
,不等于的字符c
。递归地遍历的字符s
。如果下一个字符不等于c
,则将其写入d
。递归停止点是检查是否已结束的条件s
。由于必须修改源字符串,因此实现了包装器(remove
),其中s
传递了原始字符串()作为d 。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句