编写一个程序,将小组的所有人的name存储到一个二维数组中,对名称进行排序并按顺序输出。

img


编写一个程序,将你一个小组的所有姓名存储到一个二维数组中,对名称进行排序并按顺序输出。

一个简单的实现:

#include <stdio.h>
#include <string.h>
#define MAXSTUDENTS 5
#define NAMELENGTH 20
int main(){
    
    int j,i;
    char  temp[NAMELENGTH] ;
    char  a [MAXSTUDENTS][NAMELENGTH] ; //存储一个小组的学生名字 ,默认小组最多不超过5人,每个人名字不超过20个字符 ,可以自己定义 
//    printf("1\n");
    
    printf("请输入小组每个人的姓名:\n");
    for(i=0;i<MAXSTUDENTS;i++){
        scanf("%s",a[i]); 
    } 
//    printf("输入信息为:\n");
//    for(i=0;i<MAXSTUDENTS;i++){
//        printf("%s\n",a[i]); 
//    } 
    for(j=0;j<MAXSTUDENTS-1;j++){  //遍历姓名字符串数组 
        
        //printf("2\n");
        for(i=j+1;i<MAXSTUDENTS;i++){   //逐个将当前数组i位置的名字和后面的每个位置的名字进行比较,按ASCII码大小从小到大排列 
            //printf("3\n");
            if(strcmp(a[i],a[j])<0){  //如果当前i为主的姓名字符串比i位置后面的字符串第一个字母ASCII码小 ,则交换这个字符串 
            //    printf("i=%d,j=%d,a[%d]=%s,a[%d]=%s\n",i,j,i,a[i],j,a[j]);
                strcpy(temp,a[j]);
                strcpy(a[j],a[i]);
                strcpy(a[i],temp);
            //    printf("after change,i=%d,j=%d,a[%d]=%s,a[%d]=%s\n",i,j,i,a[i],j,a[j]);
//                temp = a[i];
//                a[i] = a[j];
//                a[j] = temp; 
            }
        }
    }
    
    printf("排序后的结果为:\n");
    for(i=0;i<MAXSTUDENTS;i++){
        printf("%s\n",a[i]);
    }
    
    return 0;
}