东华OJ基础题76 字符串排序

问题描述 :
明明刚刚开始学英文,对于26个英文字母的顺序总是记不住,每次默写英文字母的时候,顺序总是前后颠倒。明明的爸爸对此相当着急,想有没有很好的办法来帮助明明记住字母的顺序。一天,明明的爸爸突然想到了一个游戏,能够帮助明明记住英文字母。这个游戏如下,给明明一个任意长度的英文字串,其中只包含小写字母,然后让明明对字符串中的字母排序,然后再把排完序的字符串写出来,如果连续写对10次的话,明明的爸爸就会奖励他,带他出去吃KFC。 例如:有一个字符串为asdf,经过排序后的字符串就是adfs。 明明显然对这个游戏非常感兴趣(其实明明更感兴趣的是那顿KFC),接受了他爸爸的提议,玩起了这个游戏。但是明明的爸爸在出题目考明明的时候,自己却犯了难,用英文随便写出一个无序的英文字符串是很简单的,但是排序的话却要费一些功夫,而且还不能出错,否则就无法知道明明做的对不对了。于是明明的爸爸请你帮忙,帮他写一个排序程序,来输出排序后的字符串。
明明爸爸的问题可以归结为:输入一行字符串,全部由小写字母构成,对字符串按26个英文字母的先后顺序进行排序,然后输出。

输入说明 :
你写的程序要求从标准输入设备中读入测试数据作为你所写程序的输入数据。标准输入设备中有多组测试数据,每组测试数据仅占一行,每行由一个字符串组成,字符串中只包含小写字母,字符串的长度不超过100个字符。每组测试数据与其后一组测试数据之间没有任何空行,第一组测试数据前面以及最后一组测试数据后面也都没有任何空行。

输出说明 :
对于每一组测试数据,你写的程序要求计算出一组相应的运算结果,并将这一组运算结果作为你所写程序的输出数据依次写入到标准输出设备中。每组运算结果为一个排序后的字符串。每组运算结果单独形成一行数据,其行首和行尾都没有任何空格,每组运算结果与其后一组运算结果之间没有任何空行,第一组运算结果前面以及最后一组运算结果后面也都没有任何空行。

输入范例 :
asdf
shflsahfslfdjsldfsjd
输出范例:
adfs
adddffffhhjjlllsssss

总结
1.题目很长,总结起来就一件事,字母排序,在做这道题之前,我用代码做了这样的一个测试;
在这里插入图片描述
好了,这样问题就简单多了。这个小代码说明了字符是直接可以比较的,那么把问题直接就可以归结为类似于整数排序,那么可选性就很多了。我还是比较喜欢直接选择排序
2.加油加油!!!

#include<stdio.h>
#include<ctype.h>
#include<string.h>
int main(){
	int len,i,j;
	char str[101];
	char key;
	while(gets(str)){
		len=strlen(str);
		for(i=1;i<len;i++){		//直接插入排序
			if(str[i]<str[i-1]){
				key=str[i];
				for(j=i-1;j>=0 && key < str[j];j--){
					str[j+1]=str[j];
				}
				str[j+1]=key;
			}
		}
		puts(str);		//简直大爱这个输出函数,不仅省几个字而且还自动换行
	}
	return 0;
}

发布了16 篇原创文章 · 获赞 1 · 访问量 115

猜你喜欢

转载自blog.csdn.net/weixin_44205451/article/details/104581466