1.实现一个函数,函数将一个字符串中的字符'*'移到串的前部分,其他字符后移,但不能改变非'*'字符的先后顺序,函数返回串中字符'*'的数量。如原始串为:1**2***567*,处理后为******12567,函数返回值为6。(要求使用尽量少的时间和空间)
时间: 2024-03-30 18:32:12 浏览: 39
在主函数中输入一含有大写字母的字符串,调用该函数并输出改变后的字符串。
你可以使用双指针的方法来实现这个函数。定义两个指针,一个指向字符串的开头,一个指向字符串的末尾。然后,从两端开始遍历字符串,如果左指针指向的字符是'*',则将左指针右移一位;如果右指针指向的字符不是'*',则将右指针左移一位;如果左指针指向的字符不是'*'且右指针指向的字符是'*',则交换两个字符。重复这个过程直到左指针大于等于右指针。
以下是实现该函数的代码示例:
```cpp
#include <iostream>
using namespace std;
int moveStarsToFront(string& str) {
int count = 0;
int left = 0;
int right = str.length() - 1;
while (left < right) {
if (str[left] == '*') {
left++;
count++;
} else if (str[right] != '*') {
right--;
} else {
swap(str[left], str[right]);
left++;
right--;
count++;
}
}
return count;
}
int main() {
string str = "1**2***567*";
int count = moveStarsToFront(str);
cout << "处理后的字符串为:" << str << endl;
cout << "函数返回值为:" << count << endl;
return 0;
}
```
运行结果:
处理后的字符串为:******12567
函数返回值为:6
阅读全文