标题
处理字符串
时间限制
1S
内存限制
1000Kb
问题描述
从键盘输入一个字符串,将该字符串按下述要求处理后输出:
将ASCII码大于原首字符的各字符按原来相互间的顺序关系集中在原首字符的左边,
将ASCII码小于等于原首字符的各字符按升序集中在原首字符的右边。
输入说明
输入一行字符串,字符串c不长度超过100.
输出说明
输出处理后的一行字符串
输入样例
aQWERsdfg7654!@#$hjklTUIO3210X98aY
输出样例
sdfghjkla!#$0123456789@EIOQRTUWXYa
首先思路还是将首字母作为分界点分理处两个数组,然后将数组分别输出
#include <stdio.h>
#include <string.h>
int main() {
char str[100], a[100], b[100] ;
gets(str);//输入字符串
int i = 0, c = 0, d = 0, m, n, len;
len = strlen(str);//计算字符串长度
for (i = 0; i < len; i++) { //利用字符串长度确定循环条件
if (str[i] > str[0]) {
//按照题目条件将ASCII码与首字母比较
a[c] = str[i];
c++;
} //将大于首字母的单独保存在一个数组中
else {
b[d] = str[i];
d++;
} //将小于或等于的保存在另外一个数组中
}
for (i = 1; i <= d; i++) {
for (n = 1; n < d - i; n++)
if (b[n] > b[n + 1]) {
m = b[n];
b[n] = b[n + 1];
b[n + 1] = m;
}//运用冒泡排序重新排列
}
for (i = 0; i < c; i++)
printf("%c", a[i]);
for (i = 0; i < d; i++)
printf("%c", b[i]);
}
//最后按照条件输出