c++编写函数 void fun(char *a),该函数实现的功能是:将字符串a 中除前导和尾部连续的*之外,其余的*全部删除。例如字符串: ***a*b**,处理后为: ***ab**。在 main函数中,从键盘输入带*且无空格的字符串,调用 fun 函数处理字符串,并将处理后的字符串输出到屏幕上。说明:不得使用系统提供的字符串函数。
时间: 2023-07-23 15:20:59 浏览: 90
编写函数void fun(char *s,char *t,char *p)将未在字符串s中出现、而在字符串t中出现的字符, 形成一个新的字符串放在p中,p中字符按原字符串中字符顺序排列,但去掉重复字符。
5星 · 资源好评率100%
好的,下面是实现该函数的代码:
```c++
#include <iostream>
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 = left, j = right;
while (i <= j) {
if (a[i] == '*') {
while (j >= i && a[j] == '*') {
j--;
}
swap(a[i], a[j]);
j--;
}
i++;
}
// 将右边界之后的字符全部置为 '\0'
for (i = right + 1; i < len; i++) {
a[i] = '\0';
}
// 将左边界之前的字符全部移到开头
for (i = left - 1; i >= 0; i--) {
a[i + left] = a[i];
}
// 将右边界之后的字符全部移到末尾
for (i = right + 1; i < len; i++) {
a[i - right + left - 1] = a[i];
}
// 将中间的部分全部置为 *
for (i = left; i <= right; i++) {
if (a[i] != '*') {
a[i] = '*';
}
}
}
int main() {
char a[100];
cin >> a;
fun(a);
cout << a << endl;
return 0;
}
```
该函数的主要思路是先找到左边界和右边界,然后通过双指针法将中间的 * 删除,最后将左边界之前的字符移动到开头,右边界之后的字符移动到末尾,并将中间的部分全部置为 *。
阅读全文