题解 | #字符串排序#
字符串排序
https://www.nowcoder.com/practice/5190a1db6f4f4ddb92fd9c365c944584
#include <stdio.h>
#include <string.h>
char to_upper(char ch) {
char tem='\0';
if (ch >='A' && ch <= 'Z') {
tem = ch + 32;
return tem;
}
return ch;
}
int check_char(char ch) {
if ((to_upper(ch) >= 'a' && to_upper(ch) <= 'z'))
{
return 1;
}
return 0;
}
int main() {
char tem='\0',str[1001];
gets(str);
int len = strlen(str);
int low = 0, fast = 1,i,j=0;
char res[1000];
//将输入字符串中的字母读出放入一个新的数组
for(i=0;i<len;i++)
{
if(check_char(str[i]))
{
res[j++]=str[i];
}
}
low=j-1;
// low=strlen(res);
// res[low-3]='\0';
//对存放字母的数组进行冒泡排序
for(i=0;i<low;i++)
{
for(j=0;j<low;j++)
{
if(to_upper(res[j+1])<to_upper(res[j]))
{
tem = res[j+1];
res[j+1] = res[j];
res[j] = tem;
}
}
}
//将排序好的字母放回原数组
j=0;
for(i=0;i<len;i++)
{
//检查第i个数组元素的内容是否为字母,是的话就将经过排序的数组对应位置的元素放进去
if(check_char(str[i]))
{
str[i]=res[j];
if(j<=low)
{
j++;
} else {
break;
}
}
}
// low=check_char('1');
// for(i=0;i<low+1;i++)
printf("%s",str);
}
原来是准备使用快慢指针来解决这个问题的,但是最终实现出来的结果只能保证没有重复字符出现的时候输出符合题目要求,不然输出结果会将(重复出现的字符)先输入的字符放到后输入的字符之后,而题目要求相同的字符要保持输入时的顺序。因此后面改用稍暴力一点的方法来解决。也就是上面的最终呈现的代码。


查看16道真题和解析