| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1717 人关注过本帖
标题:新手拜托大家看一看,这字符串排序的程序哪里出问题了?
只看楼主 加入收藏
神经彬
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2016-10-11
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:15 
新手拜托大家看一看,这字符串排序的程序哪里出问题了?
程序代码:
#include<stdio.h>
#define n 3
#include<string.h>
void sort(char a[][10])
{
    int i,j;
    char b[10];
    for(i=0;i<10;i++){
        for(j=1;j<10-i;j++){
            if(strcmp(a[i],a[j])>0){
                strcpy(b,a[j]);
                strcpy(a[j],a[i]);
                strcpy(a[i],b);
            }
        }
    }
}
int main()
{
    char str[n][10];
    int i,j;
    for(i=0;i<n;i++){
        scanf("%s",&str[i]);
    }
    sort(str);
    for(i=0;i<n;i++){
        printf("%s\n",str[i]);
    }
    printf("\n");

    return 0;
}

搜索更多相关主题的帖子: 字符串 
2016-10-13 23:37
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:5 
for(i=0;i<n;i++){
        for(j=i+1;j<n;j++)

[此贴子已经被作者于2016-10-14 08:28编辑过]

2016-10-14 07:58
chenchen224
Rank: 4
等 级:业余侠客
威 望:1
帖 子:61
专家分:237
注 册:2016-8-11
收藏
得分:5 
原本你定义的j没用上,现在可以了 没有警告啦。
int main()
{
    char str[n][10];
    int i,j;
    for(i=0;i<n;i++){
        scanf("%s",&str[i]);
    }
    sort(str);
    for(j=0;j<n;j++){
        printf("%s\n",str[i]);
    }
    printf("\n");

    return 0;
}

我想做的,只是静静的把C学好,从此代码是爱人......
2016-10-14 08:26
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
收藏
得分:5 
for(i=0;i<10;i++){ //你先前定义 n=3 i<3
         for(j=1;j<10-i;j++){  //注意n=3 a[j]中的j不会大于3
             if(strcmp(a[i],a[j])>0){
                 strcpy(b,a[j]);
                 strcpy(a[j],a[i]);
                 strcpy(a[i],b);
             }
         }
     }

按2楼来改就行了

早知做人那么辛苦!  当初不应该下凡
2016-10-14 09:55
word123
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:13
帖 子:333
专家分:1622
注 册:2014-4-5
收藏
得分:5 
#include<stdio.h>
#define n 3
#include<string.h>
void sort(char a[][10])
{
    int i,j;
    char b[10];
   
    //冒泡排序
    for(i=0;i<n-1;i++){  //排序n-1次
        for(j=0;j<n-i-1;j++){//第i次比较n-i-1次
            if(strcmp(a[j],a[j+1])>0){
                strcpy(b,a[j+1]);
                strcpy(a[j+1],a[j]);
                strcpy(a[j],b);
            }
        }
    }
   
/*
    //选择排序
    for(i=0;i<n-1;i++){     //每次从i之后选一个最小的数放在a[i]里
        for(j=i+1;j<n;j++){  //从i之后找最小数
            if(strcmp(a[i],a[j])>0){   //比较浪费时间,   可以用一个int min指向最小数的位置,本次比较完再将a[min]和a[i]交换
                strcpy(b,a[j]);
                strcpy(a[j],a[i]);
                strcpy(a[i],b);
            }
        }
    }
    */
}
int main()
{
    char str[n][10];
    int i;
    for(i=0;i<n;i++){
        scanf("%s",str[i]);  //str[i]就表示一个地址
    }
    sort(str);
    for(i=0;i<n;i++){
        printf("%s\n",str[i]);
    }
    printf("\n");

    return 0;
}

//从你排序的双重for循环来看像是冒泡排序,但从你比较来看又像是选择排序,不知道你想用哪一种
2016-10-14 10:57
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:0 
回复 5楼 word123
版主大大,请教这两个排序有本质区别吗?似乎一个是内循环从数组最后开始和外循环数据比较,0号元素为基准,而另一个内循环是从外循环+1的位置开始比较,数组尾为循环结束基准,内循环符合比较条件的都立即交换数据。
在我理解里:只要内循环立即交换数据的都属于冒泡排序,而内循环交换数据序号,在外循环里交换数据的才是选择排序。
2016-10-14 11:12
神经彬
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2016-10-11
收藏
得分:0 
回复 5楼 word123
冒泡排序
2016-10-14 21:25
神经彬
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2016-10-11
收藏
得分:0 
回复 3楼 chenchen224
是没有报错了,但是没有解决题目的问题
2016-10-14 21:33
神经彬
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2016-10-11
收藏
得分:0 
回复 2楼 linlulu001
我是想用冒泡排序的,这两种结果应该都一样吧,只是我这么想,str[3][10],就是3行10列,第一行str[0],第二行str[1],第三行str[2],每个都有是个元素吧,然后对每一个数组内部进行排序,排序好后载输出这str[3][10],所以我用的是i<10,不明白为什么要用i<n,难道是我一开始对题目就理解错误了吗
2016-10-14 21:39
神经彬
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2016-10-11
收藏
得分:0 
回复 6楼 xzlxzlxzl
对,我也觉得差不多
2016-10-14 21:40
快速回复:新手拜托大家看一看,这字符串排序的程序哪里出问题了?
数据加载中...
 
   



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

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