C语言 字符串数组字典排序

编写一个书名排序程序,输入10个书名存入一个二维数组,用函数voidsort(char*s)实现他们的字典排序,在main函数输出结果... 编写一个书名排序程序,输入10个书名存入一个二维数组,用函数void sort(char *s)实现他们的字典排序,在main函数输出结果 展开
 我来答
White_MouseYBZ
2016-01-09 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6594万
展开全部

二维数组记录书名,再声明一个指针数组并使各元素分别指向各书名,然后对指针数组元素按其指向的书名的字典顺序排序。这样比直接拷贝书名的效率会高些。举例如下:

//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
#include "string.h"
#define N 10
void mysort(char *s[],int n){
    int i,j,k;
    for(i=0;i<n;i++){
        for(k=i,j=k+1;j<n;j++)
            if(strcmp(s[k],s[j])>0)
                k=j;
        if(i!=k){
            s[i]=(char *)((unsigned)s[i]^(unsigned)s[k]);//交换指针
            s[k]=(char *)((unsigned)s[k]^(unsigned)s[i]);
            s[i]=(char *)((unsigned)s[i]^(unsigned)s[k]);
        }
    }
}
int main(void){
    char book[N][30],*pbook[N];
    int i,k;
    for(i=0;i<N;pbook[i]=book[i++]);
    printf("Please enter 10 book-name...\n");
    for(i=0;i<N;pbook[i]=book[i++])
        scanf("%s",book+i);
    mysort(pbook,N);
    for(k=i=0;i<N;printf(++k%5 ? "%s " : "%s\n",pbook[i++]));//打出来看看......
    if(k%5) printf("\n");
    return 0;
}
xoaxa
2015-05-17 · TA获得超过8610个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3467万
展开全部
#include <stdio.h>
#include <string.h>
 
const int MAXLEN = 100;
const int MAXSIZE = 10;
  
void sort(char title[][MAXLEN],int n) {//排序
    int i,j,k;
    char tstr[MAXLEN];
    for(i = 0; i < n - 1; ++i) {
        k = i;
        for(j = i + 1; j < n; ++j) {
            if(strcmp(title[k],title[j]) > 0)
                k = j;
        }
        if(k != i) {
            strcpy(tstr,title[k]);
            strcpy(title[k],title[i]);
            strcpy(title[i],tstr);
        }
    }
}
 
void show(char s[][MAXLEN],int n) {
    int i;
    for(i = 0; i < n; ++i)
        printf("%s",s[i]);
    puts(" ");
}
  
int main(void) {
    char s[MAXSIZE][MAXLEN];
    int i;
    for(i = 0; i < MAXSIZE; ++i) {
        printf("string(%02d/%d):",i + 1,MAXSIZE);
        fgets(s[i],MAXLEN,stdin);
    }
    printf("排序前:\n");
    show(s,MAXSIZE);
    sort(s,MAXSIZE);
    printf("排序后:\n");
    show(s,MAXSIZE);
    return 0;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式