用C++编写下列程序:编写函数void fun(char *a),该函数实现的功能是:将字符串a中除前导和尾部连续的*之外,其余的*全部删除。例如字符串:***a*b**,处理后为:***ab**。在main函数中,从键盘输入带*且无空格的字符串,调用fun函数处理字符串,并将处理后的字符串输出到屏幕上。说明:不得使用系统提供的字符串函数。
时间: 2023-07-23 13:20:53 浏览: 94
以下是实现该程序的C++代码:
```c++
#include <iostream>
#include <cstring>
using namespace std;
void fun(char *a) {
int len = strlen(a);
int left = 0, right = len - 1;
while (left < len && a[left] == '*') left++; // 找到第一个非*字符的位置
while (right >= 0 && a[right] == '*') right--; // 找到最后一个非*字符的位置
int i, j;
for (i = left, j = left; i <= right; i++) {
if (a[i] != '*') {
a[j] = a[i];
j++;
} else if (i > 0 && a[i - 1] != '*') {
a[j] = a[i];
j++;
}
}
a[j] = '\0'; // 字符串末尾加上结束符
}
int main() {
char str[100];
cout << "请输入带*且无空格的字符串:";
cin >> str;
fun(str);
cout << "处理后的字符串为:" << str << endl;
return 0;
}
```
在程序中,首先用两个指针 `left` 和 `right` 找到字符串中除前导和尾部连续的 `*` 之外的最左和最右的非 `*` 字符的位置。然后,用另外两个指针 `i` 和 `j` 遍历字符串,将非 `*` 字符复制到新字符串中,并且只复制连续的 `*` 中的一个。最后,将新字符串末尾加上结束符,即可得到处理后的字符串。
阅读全文