題目
把一個(gè)字符串的大寫字母放到字符串的后面晌涕,各個(gè)字符的相對(duì)位置不變滋捶,且不能申請(qǐng)額外的空間。
解題之法
#include <iostream>
#include <string.h>
using namespace std;
int main(){
string s;
while(cin >> s){
if(s.length() >= 1 && s.length() <= 1000){
for(int i = 0; i < s.length(); i++)
if(s[i] >= 'a' && s[i] <= 'z')
cout << s[i];
for(int i = 0; i < s.length(); i++)
if(s[i] <= 'Z' && s[i] >= 'A')
cout << s[i];
cout << endl;//
}
}
return 0;
}
分析
上述解法是取巧余黎,只為輸出字符串重窟,如果要想交換大小寫位置,給出下面這種解法:
#include<iostream>
#include<string>
using namespace std;
bool isCap(char c)
{
if (c >= 'A' && c <= 'Z')
return true;
else
return false;
}
void mSwap(char &a, char &b)
{
if (a != b)
{
a ^= b;
b ^= a;
a ^= b;
}
}
int main()
{
string s;
while (cin >> s)
{
int len = s.size();
int end = len;
for (int i = 0; i<end; ++i)
{
if (isCap(s[i]))
{
int j = i;
for (; j<len- 1; ++j)
mSwap(s[j], s[j + 1]);
--end;
--i;
}
}
cout << s <<endl;
}
return 0;
}