问题描述
从键盘输入一个字符串,将该字符串按下述要求处理后输出:
将ASCII码大于原首字符的各字符按原来相互间的顺序关系集中在原首字符的左边,
将ASCII码小于等于原首字符的各字符按升序集中在原首字符的右边。
输入说明
输入一行字符串,字符串c不长度超过100.
输出说明
输出处理后的一行字符串
输入样例
aQWERsdfg7654!@#$hjklTUIO3210X98aY
输出样例
sdfghjkla!#$0123456789@EIOQRTUWXYa
#include<stdio.h> #include<string.h> void order(char s2[]){ int i,j,len=strlen(s2); char ch; for (i = 0; i < len-1; i++) { for (j = i; j < len; j++) { if (s2[i] > s2[j]) { ch = s2[i]; s2[i] = s2[j]; s2[j] = ch; } } } } int main() { char str[101]={0}, s1[99]={0}, s2[99]={0}; int i, k1 = 0, k2 = 0,len; //gets(str); scanf("%s",str); len=strlen(str); for (i = 1; i < len; i++) { if (str[i] > str[0]) { s1[k1] = str[i]; k1 += 1; } if (str[i] <= str[0]){ s2[k2] = str[i]; k2 += 1; } } s1[k1] = 0; s2[k2] = 0; printf("%s",s1); printf("%c", str[0]); order(s2); printf("%s",s2); return 0; }
在程序里的判断条件不能使用strlen()函数,因为该函数的返回值为unsigned int 与int比较或加减会出错,因为int第一位表示正负,而unsigned int八位都表示大小。正确的应定义int的变量a=strlen(),再在判断条件中使用该变量a而不是直接使用函数,这样就把unsigned转化为了int型