题目
将字符串中小写字母移到前面,大写字母移到后面,并保证顺序不变,要求不使用额外空间
本题使用冒泡排序的思想进行操作,以字符串“abCDefG”为例,进行排序,从后向前遍历,首先发现G,不进行操作,继续向前,当发现f是,如果f前面是大写字母则进行交换,否则不动,由于前面是e所以不动,再向前,前面是D,此时交换e和D,再遍历继续交换,e和C,最后停止,此时顺序为“abeCDfG”,以此类推,下一步进行f的交换,最后完成排序。
代码如下:
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
void ReSort(string &s)
{
bool flag = true;
for (int i = 0; i < s.size()&&flag; ++i)
{
flag = false;//设置标志位,如果第一遍遍历后发现后面一个小写字母都没有,则不再进行遍历
for (int j = s.size() - 2; j >= i; j--)
{
if (s[j + 1] <= 'z'&&s[j + 1] >= 'a'&&s[j] >= 'A'&&s[j] <= 'Z')
{
swap(s[j + 1], s[j]);
flag = true;
}
}
}
}
int main()
{
string s;
cin >> s;
ReSort(s);
cout << s;
system("pause");
return 0;
}