注册 登录
编程论坛 C语言论坛

从键盘输入多个国家的名称,编写程序按字母顺序排列出场次序,并按出场顺序输出各国家名称。

biemenghan 发布于 2020-06-20 11:54, 4626 次点击
小白小弟初来驾到,求各位指点

输入格式:
第1行输入1个整数n(0≤n≤20),表示出场国家数量;之后 n行,每行输入1个国家名称(国家名称长度不超过20,可含空格)。

输出格式:
按字母序输出n行国家名称。若输入国家数n不合题意,则输出“Data Error”;若国家数为0,无输出。

输入样例:
5
Romania
United Kingdom
America
China
Brazil
输出样例:
America
Brazil
China
Romania
United Kingdom
6 回复
#2
吹水佬2020-06-20 12:00
字符串排序
#3
biemenghan2020-06-20 12:02
回复 2楼 吹水佬
能否帮忙给出具体的,时间比较紧🙏
#4
吹水佬2020-06-20 15:17
以下是引用biemenghan在2020-6-20 12:02:18的发言:

能否帮忙给出具体的,时间比较紧🙏

数值排序是数值大小的比较,这个会吧,将“数值”的概念换成“字符串”的概念就是

#5
fulltimelink2020-06-20 17:03
fgets为啥要读回车。。。。
程序代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int cmpFunc(const void *a, const void*b) {
    return strcmp((*(char **)a) ,(*(char **)b));
}

int main(){
    int n;
    scanf("%d", &n);
    if(0 >= n) return 0;
    getchar();
    char **strp = (char **)malloc(sizeof(char *) * n);
    for(int i=0;i<n;i++){
        *(strp+i) = (char *)malloc(sizeof(char) * 21);
        fgets(*(strp+i), 21, stdin);
    }
    qsort(strp, n, sizeof(char *), cmpFunc);
    for(int i=0;i<n;i++){
        printf("%s", *(strp+i));
        free(*(strp+i));
    }
    free(strp);
    return 0;
}
#6
八画小子2020-06-20 19:44
以下是引用biemenghan在2020-6-20 11:54:30的发言:

小白小弟初来驾到,求各位指点

输入格式:
第1行输入1个整数n(0≤n≤20),表示出场国家数量;之后 n行,每行输入1个国家名称(国家名称长度不超过20,可含空格)。

输出格式:
按字母序输出n行国家名称。若输入国家数n不合题意,则输出“Data Error”;若国家数为0,无输出。

输入样例:
5
Romania
United Kingdom
America
China
Brazil
输出样例:
America
Brazil
China
Romania
United Kingdom


贵客架子好大哈,不敢指点,好走不送。
#7
粉jj2020-06-21 16:26
回复 楼主 biemenghan
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
main()
{char c[20][80],(*p)[80]=c,*t;
int n,i,j;
scanf("%d",&n);
if(n<0||n>20){printf("data error");exit(0);}
for(i=0;i<n;i++)
scanf("%s",c[i]);
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
if(strcmp(p[j],p[j+1])>0){strcpy(t,p[j]);strcpy(p[j],p[j+1]);strcpy(p[j+1],t);}
for(i=0;i<n;i++)
puts(c[i]);
}
1