c++输入一个字符串,将串前和串后的*保留,而将中间的*删除。不用函数
时间: 2024-02-28 17:56:22 浏览: 84
好的,以下是一个C++程序,可以实现你的需求:
```cpp
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
cin >> s;
if (s.length() < 3) {
cout << s << endl;
return 0;
}
// 保留串头和串尾的星号
int start = 0, end = s.length() - 1;
while (s[start] == '*' && start < end) start++;
while (s[end] == '*' && start < end) end--;
// 删除中间的星号
string result;
for (int i = start; i <= end; i++) {
if (s[i] != '*') {
result += s[i];
} else {
if (i == start || i == end || s[i-1] != '*') {
result += '*';
}
}
}
cout << result << endl;
return 0;
}
```
首先读入一个字符串 `s`,然后判断字符串长度是否小于3。如果小于3,说明没有中间的星号需要删除,直接输出原字符串即可。
接下来使用两个指针 `start` 和 `end` 来记录字符串中第一个和最后一个非星号字符的位置,以保留串头和串尾的星号。然后遍历整个字符串,将非星号字符添加到 `result` 中,同时判断当前字符是否为星号。如果是星号,则需要根据它的位置和前后字符是否为星号来决定是否将它添加到 `result` 中。
最后输出 `result` 即可得到结果。