| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8420 人关注过本帖
标题:[求助] 输入五个国家的名字,按字母顺序(即按ASCII码从小到大的顺序)排列输 ...
只看楼主 加入收藏
a706708662
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2009-5-25
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:10 
[求助] 输入五个国家的名字,按字母顺序(即按ASCII码从小到大的顺序)排列输出。
[求助]  输入五个国家的名字,按字母顺序(即按ASCII码从小到大的顺序)排列输出。

      ~~~~~~希望用用数组来做~~~~~
搜索更多相关主题的帖子: 名字 从小到大 字母 排列 ASCII 
2009-10-28 17:31
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:1 
用数组直接做啊~
还有,是不是只考虑首字母的大小啊?我是只考虑首字母。
#include "stdio.h"
void main()
{
    char a[5][20];
    int i,j,t;
    int b[5]={0,1,2,3,4};
    printf("please input five countries' names:\n");
    for(i=0;i<5;i++)
      gets(a[i]);
    for(i=0;i<4;i++)
       for(j=i+1;j<5;j++)
              if(a[i][0]>a[j][0])
                 {
                     t=b[i];
                     b[i]=b[j];
                     b[j]=t;
                 }
     printf("the array of those five countries now is :\n");
     for(i=0;i<5;i++)
         puts(a[b[i]]);
}

[ 本帖最后由 m456m654 于 2009-10-28 18:17 编辑 ]
2009-10-28 17:48
a706708662
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2009-5-25
收藏
得分:0 
#include "stdio.h"
void main()
{
    char a[5][20];
    int i,j,t;
    int b[5]={0,1,2,3,4};
    printf("please input five countries' names:\n");
    for(i=0;i<5;i++)
      gets(a[i]);
    for(i=0;i<4;i++)
       for(j=i+1;j<5;j++)
              if(a[i][0]>a[j][0])
                 {  
                    /* t=b[i];
                     b[i]=b[j];
                     b[j]=t;*/
                    t=a[j][0];  
                    a[j][0]=a[i][0];  
                    a[i][0]=t;
                 }
     printf("the array of those five countries now is :\n");
     for(i=0;i<5;i++)
         puts(a[b[i]]);
         getch();
}
对~~~~~~~~~只考虑首字母就好了~~~
代码我运行了一下,好像不可以排序,在你的基础上我改了一下,现在可以排序了,谢谢你给我这个给多个字符串排序的思路~~~·
绿色的是我更改的部分,有兴趣就运行一下吧~~~~~
2009-10-28 18:49
a706708662
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2009-5-25
收藏
得分:0 
刚刚我试了一下,貌似可以不用数组 b[]

#include "stdio.h"
void main()
{
    char a[5][20];
    int i,j,t;
    printf("please input five countries' names:\n");
    for(i=0;i<5;i++)
      gets(a[i]);
    for(i=0;i<4;i++)
       for(j=i+1;j<5;j++)
              if(a[i][0]>a[j][0])
                 {
                    t=a[j][0];
                    a[j][0]=a[i][0];
                    a[i][0]=t;  
                 }
     printf("the array of those five countries now is :\n");
     for(i=0;i<5;i++)
         puts(a[i]);
         getch();
}
2009-10-28 18:55
a706708662
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2009-5-25
收藏
得分:0 
我错了,要用到数组 b[],不然输出的结果   单词的字母被打乱了,
2009-10-28 19:11
壞男孩
Rank: 1
等 级:新手上路
帖 子:3
专家分:1
注 册:2009-10-24
收藏
得分:1 
#include "stdio.h"
void main()
{
    char a[5][20];
    int i,j,t;
    printf("please input five countries' names:\n");
    for(i=0;i<5;i++)
      gets(a[i]);
    for(i=0;i<4;i++)
       for(j=i+1;j<5;j++)
              if(a[i][0]>a[j][0])
                 {   
                    t=a[j][0];
                    a[j][0]=a[i][0];   
                    a[i][0]=t;
 
                 }
     printf("the array of those five countries now is :\n");
     for(i=0;i<5;i++)
       printf("%s\n",a[i]);
       /*  puts(a[b[i]]);  */
         getch();
}
我觉得2楼的那个有点错误,我刚才试了  排列有问题 你再看看这个  我刚试了是正确的
2009-10-28 20:44
a706708662
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2009-5-25
收藏
得分:0 
#include "stdio.h"
void main()
{
    char a[5][20], b[20];
    int i,j;
    printf("please input five countries' names:\n");
    for(i=0;i<5;i++)
      gets(a[i]);
    for(i=0;i<4;i++)
       for(j=i+1;j<5;j++)
              if(a[i][0]>a[j][0])
                 {   
                    strcpy(b,a[i]);
                    strcpy(a[i],a[j]);
                    strcpy(a[j],b);

                 }
     printf("the array of those five countries now is :\n");
     for(i=0;i<5;i++)
       printf("%s\n",a[i]);
         getch();
}

这个只能实现首字母不同的……
如果首字母相同的话,这个就不能比较第二个字母……
2009-10-28 21:33
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:1 
我原来加上数组b是想记录a中首字母从小到大排列后对应的原来的下标。但是没写好,其实直接将首字母所在的行互换就可以。
这才是我本来想表达的,每行的输出后面跟着改字符串在原数组中的位置。原来的时候只交换下标了,忘了交换字符串。
#include "stdio.h"
void main()
{
    char a[5][20];
    int i,j,t;
    int b[5]={0,1,2,3,4};
    printf("please input five countries' names:\n");
    for(i=0;i<5;i++)
      gets(a[i]);
    for(i=0;i<4;i++)
       for(j=i+1;j<5;j++)
             if(a[i][0]>a[j][0])
                 {
                     t=a[i][0];
                     a[i][0]=a[j][0];
                     a[j][0]=t;
                     
                     t=b[i];
                     b[i]=b[j];
                     b[j]=t;
                 }
     printf("the array of those five countries now is :\n");
     for(i=0;i<5;i++)
         printf("%s,%d\n",a[i],b[i]);
}
当然,你这里似乎不想得到其下标的记录。

[ 本帖最后由 m456m654 于 2009-10-28 22:06 编辑 ]
2009-10-28 21:55
tfdongbo
该用户已被删除
收藏
得分:6 
提示: 作者被禁止或删除 内容自动屏蔽
2009-10-29 15:31
rengang2005
Rank: 2
等 级:论坛游民
帖 子:23
专家分:57
注 册:2006-10-20
收藏
得分:1 
对了这题目用字符串的strcmp最方便了
2009-10-29 16:23
快速回复:[求助] 输入五个国家的名字,按字母顺序(即按ASCII码从小到大的顺序) ...
数据加载中...
 
   



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

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