| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 528 人关注过本帖
标题:关于动态分配字符串又一问题 与qsort有关
只看楼主 加入收藏
bnb45
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-9-18
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:4 
关于动态分配字符串又一问题 与qsort有关
程序代码:
#include <stdio.h>
#include <string.h>

#define STR_LEN 30
#define MAX_LEN 30

int compares_str(void *p, void *q);

main()
    {
    char *p[MAX_LEN], str[STR_LEN+1];
    int n=0, num_p=0, i, j, k;

    for (;;)
        {
        if (num_p>MAX_LEN)
            {
            printf("-- There is no place left --");
            break;
            }
        printf("Enter the sentence: ");
        scanf(" %s",&str);
        if (strcmp(str,"0")==0)
            break;
        while (getchar()!='\n')
            ;
        p[n]=malloc(strlen(str)+1);
        if (p[n]==NULL)
            {
            printf("-- malloc error --");
            break;
            }
        strcpy(p[n++],str);
        num_p++;
        }

    qsort(p,n,STR_LEN+1,compares_str);

    for (i=0;i<n-1;i++)
        {
        for (j=i+1;j<n;j++)
            {
            if (strcmp(p[i],p[j])==0)
                {
                free(p[j]);
                for (k=j;k<n;k++)
                    p[k]=p[k+1];
                }
            }
        }

    for (i=0;i<n;i++)
        printf("%s\n",p[i]);

    getch();
    return 0;
    }

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


   屏幕上显示都是null
不知道又是怎么回事
望解答
搜索更多相关主题的帖子: qsort 动态 字符 
2010-09-20 17:21
bnb45
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-9-18
收藏
得分:0 
来个人。。
2010-09-20 18:12
清风拂晓
Rank: 8Rank: 8
来 自:火星
等 级:蝙蝠侠
威 望:1
帖 子:356
专家分:889
注 册:2010-8-13
收藏
得分:10 
路过

清风拂暮(木)
2010-09-21 21:11
青衣修罗
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:22
专家分:129
注 册:2010-9-16
收藏
得分:10 
不是吧,你原来这个编译都通不过的,调了半天,应该是没有错误了
程序代码:
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <stdlib.h>
#define STR_LEN 30
#define MAX_LEN 30

int compares_str(const void *p, const void *q);

main()
{
    char *p[MAX_LEN], str[STR_LEN+1];
    int n=0, num_p=0, i, j, k;
   
    for (;;)
    {
        if (num_p>MAX_LEN)
        {
            printf("-- There is no place left --");
            break;
        }
        printf("Enter the sentence: ");
        scanf(" %s",&str);
        if (strcmp(str,"0")==0)
            break;
        //while (getchar()!='\n');
        p[n]=(char *)malloc(strlen(str)+1);
        if (p[n]==NULL)
        {
            printf("-- malloc error --");
            break;
        }
        strcpy(p[n++],str);
        num_p++;
    }
   
    qsort((void *)p,n,sizeof(char *),compares_str);
   // for (i=0;i<n;i++)
    //    printf("%s\n",p[i]);
   
    for (i=0;i<n-1;i++)
    {
        for (j=i+1;j<n;)
        {
            if (strcmp(p[i],p[j])==0)
            {
                free(p[j]);                           
                for (k=j;k<n-1;k++)
                    p[k]=p[k+1];
                n--; //这个注意
            }
            else
                 j++;
        }
    }
   
    for (i=0;i<n;i++)
        printf("%s\n",p[i]);
   
  //  getchar();
    return 0;
}

int compares_str(const void *p, const void *q)
{
    return strcmp(*(char **)p,*(char **)q); //这个地方看msdn
}


/*
  int compares_str(void *p, void *q)
    {
    return strcmp((char *)p,(char *)q);
    }
*/



[ 本帖最后由 青衣修罗 于 2010-9-22 16:16 编辑 ]

程序就是:任何有目的的、预想好的动作序列。
2010-09-22 13:06
青衣修罗
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:22
专家分:129
注 册:2010-9-16
收藏
得分:0 
回复 楼主 bnb45
居然还不给结贴啊楼主

程序就是:任何有目的的、预想好的动作序列。
2010-09-23 23:59
快速回复:关于动态分配字符串又一问题 与qsort有关
数据加载中...
 
   



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

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