题目
思路
大写转小写记录大写位置,排序字母,排序完成将有标记的小写字母转大写
代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char a[1001];
int b[1001];//判读a的那个位置是大写;
//将当前字符串的所有大写转小写并在B中将大写字母的下标标志成1
void dxzh(){
int i=0;
while(a[i]!='\0'){
if(a[i]>='A'&&a[i]<='Z'){ //判断大写
a[i]+=32;
b[i]=1;
}
i++;
}
}
//当前字符串排序
void sort_char(){
//字符冒泡排序
for(int i=0;i<strlen(a);i++){
for(int j=0;j<strlen(a)-1;j++){
if(a[j]>='a'&&a[j]<='z'){//当前字符为字母
if(a[j+1]>='a'&&a[j+1]<='z'){//下一个字符也为字母
if(a[j]>a[j+1]){
int b1=b[j];
char a1=a[j];
b[j]=b[j+1];
b[j+1]=b1;
a[j]=a[j+1];
a[j+1]=a1;
}
}else{//当前位置的下一个不为字母
int m=j+1;
while(1)if(a[m]>='a'&&a[m]<='z'||m>=strlen(a)){break;}else{m++;}
if(m>=strlen(a))continue;
if(a[j]>a[m]){
int b1=b[j];
char a1=a[j];
b[j]=b[m];
b[m]=b1;
a[j]=a[m];
a[m]=a1;
}
}
}else{//当前字符不为字母
continue;
}
}
}
}
//将大小写转换回来
void hf(){
for(int i=0;i<strlen(a);i++){
if(b[i]==1)
a[i]-=32;
}
}
int main()
{
gets(a);
dxzh();
sort_char();
hf();
printf("%s",a);
return 0;
}