| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 887 人关注过本帖
标题:有人能解决这个问题吗?很久了,没人回复
只看楼主 加入收藏
qianduoduo
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-8-16
收藏
 问题点数:0 回复次数:4 
有人能解决这个问题吗?很久了,没人回复
//将单词保存在指针数组中,然后通过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-08-17 22:19
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
网上一堆,为什么不baidu?

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2008-08-17 22:22
qianduoduo
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-8-16
收藏
得分:0 
但是没有这些啊,不一样啊
2008-08-17 23:42
csynyk
Rank: 1
等 级:新手上路
威 望:1
帖 子:114
专家分:0
注 册:2008-8-9
收藏
得分:0 
qsort(*str,n,20*sizeof(char),compare); -------这个函数要求被排列的元素存放在地址连续的空间里,在函数的参数中给出连续地址的起始空间,然后它就能按照元素的类型一次进行排列运算了。而楼主给出的是一个指针数主,每个没排列的地址空间都是malloc分配的,并不能保证连续性,所以函数运行后达不到预期的目的。
    不过楼组可以这样来试试看:将*str[20]改成str[5][20]来保证地址空间的连续性,然后再用qsort来排序。

http://blog./csynyk
2008-08-18 17:31
csynyk
Rank: 1
等 级:新手上路
威 望:1
帖 子:114
专家分:0
注 册:2008-8-9
收藏
得分:0 
我给你写了一段代码,搂主可以自己编译一下看看!
程序代码:
#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./csynyk
2008-08-19 11:39
快速回复:有人能解决这个问题吗?很久了,没人回复
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.081336 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved