编写一个程序,将输入字符串中的字符按如下规则排序。
规则1:英文字母从A到Z排列,不区分大小写。
如,输入:Type 输出:epTy
规则2:同一个英文字母的大小写同时存在时,按照输入顺序排列。
如,输入:BabA 输出:aABb
规则3:非英文字母的其它字符保持原来的位置。
如,输入:By?e 输出:Be?y
样例:
输入:
A Famous Saying: Much Ado About Nothing(2012/8).
输出:
规则1:英文字母从A到Z排列,不区分大小写。
如,输入:Type 输出:epTy
规则2:同一个英文字母的大小写同时存在时,按照输入顺序排列。
如,输入:BabA 输出:aABb
规则3:非英文字母的其它字符保持原来的位置。
如,输入:By?e 输出:Be?y
样例:
输入:
A Famous Saying: Much Ado About Nothing(2012/8).
输出:
A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void swapElement(char *str,int i,int j)
{
char tempChar=str[j];
char *p1,*p2;
p1=str+j;
p2=str+j-1;
while(p1!=(str+i))
{
if(isalpha(*p1))
{
if(isalpha(*p2))
*p1--=*p2--;
else
p2--;
}
else
{
p1--;
p2=p1-1;
}
}
*(str+i)=tempChar;
}
int main()
{
int len,i,j;
char str[2048];
scanf("%[^\n]",str);
len=strlen(str);
for(i=0;i<len;i++)
{
if(isalpha(str[i]))
{
for(j=i+1;j<len;j++)
{
if(isalpha(str[j]))
{
if(toupper(str[i])>toupper(str[j]))
swapElement(str,i,j);
}
}
}
}
printf("%s\n",str);
return 0;
}