| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2543 人关注过本帖
标题:使用二级指针对字符串数组进行排序(其中冒泡法排序部分是摘抄)有2个问题
只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
结帖率:99.76%
收藏
已结贴  问题点数:20 回复次数:3 
使用二级指针对字符串数组进行排序(其中冒泡法排序部分是摘抄)有2个问题
程序代码:
#include <stdio.h>
#include <string.h>
#define num 10
int main(void)
{
    char* test[]={"All entries of the table must "," values of x and y(x) printed as ",
                  "when mainframes were ","render any typical double ",
                  "the summation process note ","repeated to produce sequences ",
                  "summing the series above","This process of finding ",
                  "convergence of the summation ","Numerical Summation of a Series"};
    char** p=test;
    char* tmp=NULL;
    int i,j,k;
    //以下用冒泡法对字符串数组进行排序
    for(i=0;i<num-1;i++)
    {
        k=i;
        for(j=i+1;j<num;j++)
        {
            if(strcmp(*(p+k),*(p+j))>0) k=j;
            if(k!=i)
            {
                tmp=*(p+k);
                *(p+k)=*(p+i);
                *(p+i)=tmp;
            }

        }
    }
    ///////////////////////////////////////////////////////////////////////////////////
    //输出排序后的字符串数组
    for(i=0;i<num;i++)
    {
        printf("源串=%-40s  长度=%d\n",*p,(int)strlen(*p));
        p++;
    }
    ///////////////////////////////////////////////////////////////////////////////////
    return 0;
F:\c_source\t2\Debug>fc
源串= values of x and y(x) printed as          长度=33
源串=All entries of the table must             长度=30
源串=Numerical Summation of a Series           长度=31
源串=convergence of the summation              长度=29
源串=This process of finding                   长度=24
源串=render any typical double                 长度=26
源串=repeated to produce sequences             长度=30
源串=summing the series above                  长度=24
源串=the summation process note                长度=27
源串=when mainframes were                      长度=21

问题1、样例输出的粉色部分 明显不对,不知道代码差哪了(我对排序不熟悉)

问题2、
看这几句交换代码
                tmp=*(p+k);
                *(p+k)=*(p+i);
                *(p+i)=tmp;
我认为,这样的代码交换类似int一类的还可以,交换字符串指针 怎么还可以呢
数组中字符串位置的变动 应该使用类似字符串拷贝一类的东东才能完成啊
搜索更多相关主题的帖子: 摘抄 字符串 
2012-12-10 20:27
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:20 
交换指针,那就要指针的指针了

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2012-12-10 20:29
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用pauljames在2012-12-10 20:29:11的发言:

交换指针,那就要指针的指针了
我明白了
字符串在内存中的地址实际上并没有发生变化,
还是初始化的位置,但是指向他们的指针的位置发生了变化,所以导致最终可以有序输出

那第一个问题呢 ,这个有序输出 实际上是错误的

DO IT YOURSELF !
2012-12-10 20:31
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <string.h>
#define num 10
int main(void)
{
    char* test[]={"All entries of the table must "," values of x and y(x) printed as ",
                  "when mainframes were ","render any typical double ",
                  "the summation process note ","repeated to produce sequences ",
                  "summing the series above","This process of finding ",
                  "convergence of the summation ","Numerical Summation of a Series"};
    char** p=test;
    int i;
    ///////////////////////////////////////////////////////////////////////////////////
    printf("一级指针**p的地址是%X  字符串指针数组test[]的地址是%X\n",&p,&test);
    printf("一级指针**p的内容是%X  \n",p);
    for(i=0;i<num;i++)
    {
        printf("源串=%-35s  长度=%d 二级指针内容为%X  test[%d]的地址是%X\n",*p,(int)strlen(*p),p,i,&test[i]);
        p++;
    }
    ///////////////////////////////////////////////////////////////////////////////////
    return 0;
}
样例输出:
F:\c_source\t2\Debug>fc
一级指针**p的地址是12FF54  字符串指针数组test[]的地址是12FF58
一级指针**p的内容是12FF58
源串=All entries of the table must        长度=30 二级指针内容为12FF58  test[0]的地址是12FF58
源串= values of x and y(x) printed as     长度=33 二级指针内容为12FF5C  test[1]的地址是12FF5C
源串=when mainframes were                 长度=21 二级指针内容为12FF60  test[2]的地址是12FF60
源串=render any typical double            长度=26 二级指针内容为12FF64  test[3]的地址是12FF64
源串=the summation process note           长度=27 二级指针内容为12FF68  test[4]的地址是12FF68
源串=repeated to produce sequences        长度=30 二级指针内容为12FF6C  test[5]的地址是12FF6C
源串=summing the series above             长度=24 二级指针内容为12FF70  test[6]的地址是12FF70
源串=This process of finding              长度=24 二级指针内容为12FF74  test[7]的地址是12FF74
源串=convergence of the summation         长度=29 二级指针内容为12FF78  test[8]的地址是12FF78
源串=Numerical Summation of a Series      长度=31 二级指针内容为12FF7C  test[9]的地址是12FF7C

DO IT YOURSELF !
2012-12-10 22:43
快速回复:使用二级指针对字符串数组进行排序(其中冒泡法排序部分是摘抄)有2个 ...
数据加载中...
 
   



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

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