题目
输入一个只有英文字母的字符串,请按小写字母在前,大写字母在后重新排序;不能改变相对位置,亦不能申请额外的内存空间。
例如:
- 输入:AbCdEFgh
- 输出:bdghACEF
$ ./a.out
AbCdEFgh
bdghACEF
C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define SWAP(a,b) do{(a)=(a)^(b);(b)=(a)^(b);(a)=(a)^(b);}while(0)
char s[1024];
int main( void )
{
memset(s, 0, sizeof(s));
fgets(s, sizeof(s), stdin);
int len = strlen(s);
while( s[len-1]=='\r' || s[len-1]=='\n' ) {
s[len-1] = '\0';
len --;
}
for( int i=1; i<len; ++i ) {
if( islower(s[i]) ) {
for( int j=0; j<i && isupper(s[i-j-1]); ++j ) {
SWAP(s[i-j], s[i-j-1]);
}
}
}
printf("%s\n", s);
return 0;
}
C++
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
string s;
int main( void )
{
cin >> s;
int len = s.size();
/* 冒泡法将小写字母往前移动 */
for( int i=1; i<len; ++i ) {
if( islower(s[i]) ) {
for( int j=0; j<i && isupper(s[i-j-1]); ++j ) {
swap<char>(s[i-j], s[i-j-1]);
}
}
}
cout << s << endl;
return 0;
}