C++代码【问题描述】分别用字符数组或字符指针做函数参数,在字符串中删除与某字符相同的字符,执行两次删除和结果输出显示。若删除后为空串,则输出NULL。 void Delete1(char s[ ], char ch); void Delete2(char *p, char ch); 【样例输入】 abcdabcd c d 【样例输出】 abdabd abab
时间: 2024-03-21 20:38:10 浏览: 92
以下是完整的C++代码,实现了你的要求:
```c++
#include <iostream>
#include <cstring>
using namespace std;
void Delete1(char s[], char ch) {
int len = strlen(s);
for (int i = 0; i < len; i++) {
if (s[i] == ch) {
for (int j = i; j < len - 1; j++) {
s[j] = s[j + 1];
}
len--;
i--;
}
}
s[len] = '\0';
}
void Delete2(char* p, char ch) {
int len = strlen(p);
for (int i = 0; i < len; i++) {
if (*(p + i) == ch) {
for (int j = i; j < len - 1; j++) {
*(p + j) = *(p + j + 1);
}
len--;
i--;
}
}
*(p + len) = '\0';
}
int main() {
char str[100], ch1, ch2;
cin >> str >> ch1 >> ch2;
Delete1(str, ch1);
Delete1(str, ch2);
if (strlen(str) == 0) {
cout << "NULL" << endl;
}
else {
cout << str << endl;
}
char* p = new char[100];
strcpy(p, str);
Delete2(p, ch1);
Delete2(p, ch2);
if (strlen(p) == 0) {
cout << "NULL" << endl;
}
else {
cout << p << endl;
}
delete[] p;
return 0;
}
```
程序中首先定义了两个函数 `Delete1` 和 `Delete2`,分别用于使用字符数组和字符指针删除字符串中的指定字符。具体实现是:遍历字符串,找到相同的字符后,将后面的字符依次向前移动一个位置,最后将字符串的长度减1,并在结尾处添加一个空字符。
然后在主函数中,先读入字符串和要删除的字符,调用 `Delete1` 函数两次,并输出结果。如果删除后字符串为空,则输出 "NULL"。接着将字符串复制到字符指针中,并调用 `Delete2` 函数两次,同样输出结果。最后记得释放动态分配的内存。
希望能够帮到你,有疑问可以继续提问哦。
阅读全文