转换排序
##xdoj
描述
输入一维字符数组str[N](N≤80),查找出其中小写字母并转换成大写字母,按下面方式排序:1、只对大写字母进行排序;2、其他字符原位保持不动;3、转换后的各大写字母由小到大排序。输出排序后的结果。
时间限制
1
内存限制
10000
类别
1
输入说明
输入一行字符数据str[N](N≤80)。
输出说明
格式输出:输出仅对转换后的大写字母排序结果,其他字符原位不动输出。
输入样例
xA3T7p
输出样例
AP3T7X
提示
注意转换方式和排序要求。
PS:看到此题,我的第一想法是先将语句中检索出小写,再将小写转化为大写
如下图所示
for(i=0;(c=str[i])!='\0';i++)
if(c>='a'&&c<='z') {str[i]=str[i]-32;}
再接着我们将其中的大写字母取出进行排序
if(str[i]>='A'&&str[i]<='Z'){xu[j]=str[i];j++;}
再对数组筛查把排序后的大写字母去替代之前的
详细代码如下
#include<stdio.h>
char xu[80];
int main()
{ int i,j=0;
char str[80],c;
gets(str);
for(i=0;(c=str[i])!='\0';i++)
{if(c>='a'&&c<='z') {str[i]=str[i]-32;}
if(str[i]>='A'&&str[i]<='Z'){xu[j]=str[i];j++;}
}
if(j){line(j);}
for(i=0,j=0;(c=str[i])!='\0';i++)
{if(c>='A'&&c<='Z'){str[i]=xu[j];
j++;
}
else continue;
}
puts(str);
return 0;
}
int line(int number)
{int i,j;
char c;
for(i=0;i<number-1;i++)
for(j=0;j<number-i-1;j++)
{if(xu[j]>xu[j+1])
{c=xu[j+1];
xu[j+1]=xu[j];
xu[j]=c;
}
}
return 0;
}