编写一个函数delchar(char *s1,char s2),从字符串s1中删除与字符s2相同的字符。并用main()测试该函数。使用递归方法
时间: 2024-12-04 07:26:28 浏览: 17
当你提到要使用递归来实现这个功能时,我们可以创建一个递归函数,该函数会在每次迭代中检查字符串中的每个字符,如果发现与给定字符`s2`相等,就跳过该位置,继续处理下一个字符。递归将在遇到字符串结束或找到不匹配字符时停止。
这是一个简单的递归示例,展示了如何实现`delchar`函数:
```cpp
#include <iostream>
// 定义递归函数,传入指针、已遍历到的位置和当前字符
bool delcharRec(char* s1, char* current, char s2) {
// 如果已到达字符串末尾,返回true表示完成删除操作
if (*current == '\0') {
return true;
}
// 检查当前字符是否等于目标字符
if (*current != s2) {
// 不等于则复制当前字符到新位置并移动指针
*current = *(++current);
} else {
// 相等,直接跳过
return delcharRec(s1, ++current, s2); // 递归调用,处理下一个字符
}
return delcharRec(s1, current + 1, s2); // 继续处理剩余部分
}
// 主函数,用于测试
int main() {
char str[] = "hello world!";
char targetChar = 'o';
std::cout << "Original string: ";
for (const char c : str) {
std::cout.put(c);
}
std::cout << "\n";
// 删除目标字符后的新字符串
char* result = new char[strlen(str)];
if (!delcharRec(result, result, targetChar)) {
// 如果删除成功(没有发生'\0'),终止循环
result[strcspn(result, "")] = '\0'; // 添加空字符串终止符
}
std::cout << "After deleting '" << targetChar << "': ";
for (const char c : result) {
std::cout.put(c);
}
std::cout << "\n";
delete[] result; // 释放内存
return 0;
}
```
在这个例子中,`delcharRec`函数递归地处理字符串`s1`,直到所有字符都被检查或删除。主函数`main`测试了这个函数,并打印了原始字符串和修改后的结果。
阅读全文