反转后的字符串排序
发布时间: 2018年3月20日 21:35 最后更新: 2018年3月21日 00:33 时间限制: 1000ms 内存限制: 128M
描述
输入n个字符串,对这n个字符串(按反转后字典序)排序并输出。例如两个字符串为“aab”, “cba”,则“cba”应该排在“aab”之前,因为“cba”反转后为“abc”,”aab”反转后为”baa”。
输入
第一行为一个整数n,表示字符串的数目。(0<n<50)
接下来是n行,每行一个字符串,其中字符串仅由小写字母组成,每个字符串长度不超过100,所有字符串均不相同。
输出
排完序以后的字符串,每个字符串占一行。
样例输入1
6 cpp class object stl acm bjfu
样例输出1
stl acm cpp class object bjfu
提示
字典序:对于字符串,先按首字符排序,如果首字符相同,再按第二个字符排序,以此类推。如aa,ab,ba就是一个字典序。
————————————————————————————————————————————————————
以上为原题~ 我就不太明白为什么这个做出来的人不少,上一道回文做出来的人就这么少........
关键:
1.字典序
2.反转和保存的问题
以下为标程:
#include<cstdio>
#include<cstring>
int main()
{
int n;
scanf("%d",&n);
int i,j;
char s[55][110],pos[110];
for(i=0;i<n;i++)
{
int k=0;
scanf("%s",pos);
for(j=strlen(pos)-1;j>=0;j--)
s[i][k++]=pos[j];
s[i][k]='\0';
}//这个应该是反转拷贝 学习一个
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(strcmp(s[i],s[j])>0)//字典序直接用cmp函数就好 别忘了头文件cstring
{
strcpy(pos,s[i]);
strcpy(s[i],s[j]);
strcpy(s[j],pos);
}//交换用strcpy
for(i=0;i<n;i++)
{
for(j=strlen(s[i])-1;j>=0;j--)
printf("%c",s[i][j]);
printf("\n");
}//二维数组保存字符串的输出方式
return 0;
}