给定一个字符串 s="axsfdkjgxka'klksydfgmx" 和一个字符 x='a',编写递归算法实现以下功能: (25分) (1) 检查 x 是否出现在 s 中; (2) 计算 x 在 s 中出现的次数; (3) 删除 s 中所有 x。
时间: 2024-06-07 09:05:14 浏览: 35
C语言实现输入一个字符串后打印出该字符串中字符的所有排列
(1) 递归实现检查 x 是否出现在 s 中:
bool check(char* s, char x) {
// 空字符串直接返回false
if(*s=='\0') return false;
// 如果找到x, 返回true
if(*s==x) return true;
// 否则继续查找
return check(s+1, x);
}
(2) 递归实现计算 x 在 s 中出现的次数:
int count(char* s, char x, int cnt) {
// 递归终止条件
if(*s=='\0') return cnt;
// 如果找到x, 计数器+1
if(*s==x) return count(s+1, x, cnt+1);
// 否则继续查找
return count(s+1, x, cnt);
}
(3) 递归实现删除 s 中所有 x:
void remove(char* s, char x) {
// 递归终止条件
if(*s=='\0') return;
// 如果找到x, 就将后面的字符前移一位,继续删除
if(*s==x) {
for(char* p=s; *p!='\0'; p++) {
*p = *(p+1);
}
remove(s, x);
}
// 否则继续查找
else {
remove(s+1, x);
}
}
(注意:这里是对原字符串进行修改,不是返回一个新字符串)
阅读全文