【问题描述】分别用字符数组或字符指针做函数参数,在字符串中删除与某字符相同的字符,执行两次删除和结果输出显示。若删除后为空串,则输出NULL。 void Delete1(char s[ ], char ch); void Delete2(char *p, char ch); 【样例输入】 abcdabcd c d 【样例输出】 abdabd abab
时间: 2024-02-27 11:54:36 浏览: 59
好的,这是一个关于删除字符串中某个字符的问题,下面是 C++ 的代码实现:
```c++
#include <iostream>
using namespace std;
void Delete1(char s[], char ch) {
int len = strlen(s);
int i = 0, j = 0;
while (j < len) {
if (s[j] != ch) {
s[i] = s[j];
i++;
}
j++;
}
s[i] = '\0'; // 添加字符串结束符
}
void Delete2(char *p, char ch) {
int len = strlen(p);
int i = 0, j = 0;
while (j < len) {
if (*(p + j) != ch) {
*(p + i) = *(p + j);
i++;
}
j++;
}
*(p + i) = '\0'; // 添加字符串结束符
}
int main() {
char s1[100], s2[100], ch1, ch2;
cin >> s1 >> ch1 >> ch2; // 输入字符串和两个要删除的字符
strcpy(s2, s1); // 复制一份 s1 到 s2 中,使用字符数组传参
Delete1(s1, ch1);
Delete1(s1, ch2);
cout << s1 << endl;
Delete2(s2, ch1); // 使用字符指针传参
Delete2(s2, ch2);
cout << s2 << endl;
if (strlen(s1) == 0) cout << "NULL" << endl;
if (strlen(s2) == 0) cout << "NULL" << endl;
return 0;
}
```
该程序中,我们定义了两个函数 `Delete1()` 和 `Delete2()`,分别使用字符数组和字符指针作为参数。这两个函数实现的逻辑一样,都是遍历字符串,将不等于要删除字符的字符保存到新的位置上,最后将新位置后的字符截断,使其成为一个有效的字符串。
在 `main()` 函数中,我们先输入字符串和两个要删除的字符,然后分别使用字符数组和字符指针传参调用函数,并输出结果。如果最后的字符串为空串,则输出 "NULL"。
阅读全文