标题:指针数组中输出的问题
只看楼主
lin471306489
Rank: 4
等 级:业余侠客
帖 子:136
专家分:247
注 册:2011-8-16
结帖率:100%
已结贴  问题点数:20 回复次数:10 
指针数组中输出的问题
将若干字符串按字母顺序(由大到小)输出。
#include<stdio.h>
#include<string.h>

void main()
{
    void sort(char *name[],int n);
    void print(char *name[],int n);
    char *name[]={"Follow me","BASIC","Great Wall","FORTRAN","Computer design"};
    int n=5;
    sort(name,n);
    print(name,n);
}

void sort(char *name[],int n)//用选择法去字符串排序
{
    char *temp;
    int i,j,k;
    for(i=0;i<n-1;i++)
    {
        k=i;
        for(j=i+1;j<n;j++)
            if(strcmp(name[k],name[j])>0) k=j;
            if(k!=i)
            {temp=name[i];name[i]=name[j];name[k]=temp;}
    }
}

void print(char *name[],int n)//输出排列好的字符串
{
    int i;   
    for(i=0;i<n;i++)
        printf("%s\n",p);

}
编译通过后输出的结果
?
?
?
?
Great Wall
Press any key to continue
前四个输不出来,想请教下程序出了什么问题?
搜索更多相关主题的帖子: 字母 include design 字母 include design 字符串 字符串 print print 
2011-09-04 14:34
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
得分:5 
temp=name[i]类型不匹配吧,temp是指针,name[i]是字符

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2011-09-04 15:06
obstratiker
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:198
专家分:758
注 册:2011-5-5
得分:5 
直接冒泡排序即可

#include<stdio.h>
#include<string.h>

void main()
{
    void sort(char *name[],int n);
    void print(char *name[],int n);
    char *name[]={"Follow me","BASIC","Great Wall","FORTRAN","Computer design"};
    int n=5;
    sort(name,n);
    print(name,n);
}

void sort(char *name[],int n)//用选择法去字符串排序
{
    char *temp;
    int i,j;
    for(i=0;i<n-1;i++)
    {
        for(j=i+1;j<n;j++)
            if(*(name[i]) < *(name[j]))
            {
                temp=name[i];
                name[i]=name[j];
                name[j]=temp;
            }
    }
}

void print(char *name[],int n)//输出排列好的字符串
{
    int i;   
    for(i=0;i<n;i++)
        printf("%s\n",name[i]);

}
收到的鲜花
2011-09-04 15:58
lin471306489
Rank: 4
等 级:业余侠客
帖 子:136
专家分:247
注 册:2011-8-16
得分:0 
嗯嗯,用冒泡排序的确是简单啦!
但是,我目的是想知道用选择排序法,为什么输出乱码?
2011-09-04 16:26
lin471306489
Rank: 4
等 级:业余侠客
帖 子:136
专家分:247
注 册:2011-8-16
得分:0 
至于2楼说的,看三楼的就知道原因了吧
2011-09-04 16:31
obstratiker
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:198
专家分:758
注 册:2011-5-5
得分:0 
这个
先恕我不知道什么是选择排序,从你的代码来看很像(就是)冒泡排序

然后 strcmp 是比较两字符串长度的,就是说,如果你的排序成功,那时按字符串长度大小排序(似乎你要的是按首字母大小排序)
然后在双重循环中有个 bug ,
每当 k!=i 的时候,k=j;
可是在进入下一次循环时,k 还是等于 j ,应该不对

至于乱码,你最后打印的地方代码写错了,改成 name[i],就好
收到的鲜花
2011-09-04 16:57
dreamofgod
Rank: 5Rank: 5
等 级:职业侠客
帖 子:194
专家分:341
注 册:2011-8-16
得分:5 
代码不简练,晕也晕也
程序代码:
#include<stdio.h>
#include<string.h>
void sort(char *name[],int n);
void print(char *name[],int n);
void main()
{
    void sort(char *name[],int n);
    void print(char *name[],int n);
    char *name[]={"Follow me","BASIC","Great Wall","FORTRAN","Computer design"};
    int n=5;
    sort(name,n);
    print(name,n);
}
void sort(char *name[],int n)//用选择法去字符串排序。
{
    char *temp;
    int i,j,k;
    for(i=0;i<n-1;i++)
    {
        k=i;
        for(j=i+1;j<n;j++)
        {
            if(strcmp(name[k],name[j])>0)
            {
                k=j;
            }
        }//都已经k=i、k=j了,还要name[j]再name[k],我都绕晕了,你也绕晕了。
        if(k!=i)//我怎么看都觉得是冒泡排序法。
        {
            temp=name[i];
            //name[i]=name[j];这句错了
            //上个循环的退出条件是j++之后对比j<n不成立。
            //即,循环结束后,j还要加1。
            //应该改为下面这句。
            name[i]=name[k];
            name[k]=temp;
        }
    }
}
void print(char *name[],int n)//输出排列好的字符串。
{
    int i;    
    for(i=0;i<n;i++)
    {    
        printf("%s\n",name[i]);//这里我改了下,不懂你原来的意思。
    }
}


[ 本帖最后由 dreamofgod 于 2011-9-4 17:12 编辑 ]
收到的鲜花

一个单片机就让我头疼不已~~~
2011-09-04 17:11
exo1991
Rank: 2
等 级:论坛游民
帖 子:66
专家分:98
注 册:2011-8-30
得分:5 
就本人而言同意7楼的程序代码,但我感觉7楼用的就是选择法。因为在sort函数中的第二个for语句每循环一次就会选择出一个最小的字符串。
2011-09-04 18:37
lin471306489
Rank: 4
等 级:业余侠客
帖 子:136
专家分:247
注 册:2011-8-16
得分:0 
恩恩,明白啦。
2011-09-05 12:13
klepht
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-11-14
得分:0 
问下最后输出的时候name[i]前面为什么不加*?
2012-11-14 21:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-349129-1-1.html




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

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