| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY 
共有 306 人关注过本帖
标题:有人能解决这个问题吗?很久了,没人回复
收藏  订阅  推荐  打印 
qianduoduo
Rank: 1
等级:新手上路
帖子:9
积分:190
注册:2008-8-16
有人能解决这个问题吗?很久了,没人回复

//将单词保存在指针数组中,然后通过qsort函数对数组中的单词排序后输出
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int compare(const void *p,const void *q);  //比较函数
main()
{
    char *str[20];
    int n=0,k;
    while(n<20)      
    {
        str[n]=(char*)malloc(20*sizeof(char)); 
        printf("Please enter a word:");
        scanf("%s",str[n]);
        if(!strcmp(str[n],"end"))  //输入END时结束单词输入
            break;
        n++;
    }

    qsort(*str,n,20*sizeof(char),compare);  
    for(k=0;k<n;k++)
        puts(str[k]);
}

int compare(const void *p,const void *q)
{
    return strcmp((char*)p,(char*)q);
}
搜索更多相关主题的帖子: void  单词  str  char  compare  
2008-8-17 22:19
卧龙孔明
Rank: 12Rank: 12Rank: 12
等级:版主
威望:47
帖子:3702
积分:39046
注册:2006-10-13

网上一堆,为什么不baidu?

为了中国软件工业的未来,有爱心的朋友请不要帮忙代做作业,或者至少是收费服务!如果您不需要钱,或者您不愿收费用于自己,请把收取的钱用于支援山区贫困学生…谢谢大家!
2008-8-17 22:22
qianduoduo
Rank: 1
等级:新手上路
帖子:9
积分:190
注册:2008-8-16

但是没有这些啊,不一样啊
2008-8-17 23:42
csynyk
Rank: 2
等级:注册会员
威望:1
帖子:114
积分:1460
注册:2008-8-9

qsort(*str,n,20*sizeof(char),compare); -------这个函数要求被排列的元素存放在地址连续的空间里,在函数的参数中给出连续地址的起始空间,然后它就能按照元素的类型一次进行排列运算了。而楼主给出的是一个指针数主,每个没排列的地址空间都是malloc分配的,并不能保证连续性,所以函数运行后达不到预期的目的。
    不过楼组可以这样来试试看:将*str[20]改成str[5][20]来保证地址空间的连续性,然后再用qsort来排序。

http://blog.csdn.net/csynyk
2008-8-18 17:31
csynyk
Rank: 2
等级:注册会员
威望:1
帖子:114
积分:1460
注册:2008-8-9

我给你写了一段代码,搂主可以自己编译一下看看!
程序代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int compare(const void *p,const void *q)
{
   return strcmp((char*)p,(char*)q);
}

int main(void)
{
    char *str;
    str=(char *)malloc(100*sizeof(char));
    int i;
    for(i=0; i<5; i++)
    {
        printf("Please intput a string for str[%d]:",i);
        gets(str+i*20);
    }
    qsort(str,5,20,compare);
//str为连续存储空间的起始地址,5表示参与比较的元素的个数,20表示每个元素的长度-----也就是为每个字符串分配的空间。
    for(i=0; i<5; i++)
        printf("%s\n",&str[i*20]);
    free(str);
    return 0;
}

http://blog.csdn.net/csynyk
2008-8-19 11:39
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.059355 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved