#问题求解与编程# 实验一 E 反转后的字符串排序

反转后的字符串排序

发布时间: 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;
}

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页