| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1394 人关注过本帖, 1 人收藏
标题:字符串数组排序, 高人请看一下
只看楼主 加入收藏
crowkkk
Rank: 1
等 级:新手上路
帖 子:65
专家分:0
注 册:2008-11-28
收藏(1)
 问题点数:0 回复次数:7 
字符串数组排序, 高人请看一下
下面这段代码是输入十个名字,按ASC码从小到大排序后输出结果,
比如: asea和ase应该ase排在前,但出错了,请高手看看是什么原因
另对两个字符串数组内容对调有什么其它的方法吗,我初学,刚学至数组
程序代码:
#include <stdio.h>
main()
{
  char name[10][15];
  int i;
  //输入十个人名
  for (i=0;i<10;i++)
  {
  printf("请输入第%d个人的姓名:",i+1);
  scanf("%s",&name[i]);
  }
  //起泡排序
  int j,c;
  for (i=0;i<9;i++)
    for (j=i+1;j<10;j++)
      for (c=0;c<15&&name[i][c]==name[j][c]=='\0';c++)
        if (names[i][c]>name[j][c]||name[j][c]=='\0')
        {
          char b[15];
          for (c=0;c<15;c++)
            b[c]=name[i][c];
          for (c=0;c<15;c++)
            name[i][c]=name[j][c];
          for (c=0;c<15;c++)
            name[j][c]=b[c];
          break;
         }
         else if(name[i][c]<name[j][c]||name[i][c]=='\0')
           break;
  //输出排序结果
  printf("\n排序后顺序:");
  for (i=0;i<10;i++)
    printf("\n%2d: %s",i+1,name[i]);
}
搜索更多相关主题的帖子: 高人 字符 
2008-12-12 01:54
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
字符串的比较应该用 strcmp ,字符串的转换可以用 strcpy ,你看看书上关于这两个函数的介绍,应该很好用,和普通的排序没什么大的区别。

    你的代码我没仔细看,不过看起来比较繁琐。

    如果对字符串运行比较,不要忘了加上头文件<string.h>
2008-12-12 02:09
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
下面我试写了一段代码,谨作参考。
程序代码:
#include <stdio.h>
#include<string.h>
#define N 10
#define Y 30
int main(void)
{
    int i,j;
    char name[N][Y],tmp[Y];
    char (*p)[N];
    p=name;
    for(i=0;i<N;++i)
    {
        printf("input the NO%d name:\n",i+1);
        gets(p[i]);
    }
    for(i=0;i<N;++i)
        for(j=i+1;j<N;++j)
            if(strcmp(p[i],p[j])>0)
            {
                strcpy(tmp,p[i]);
                strcpy(p[i],p[j]);
                strcpy(p[j],tmp);
            }
    p=name;
    for(i=0;i<N;++i)
        puts(p[i]);
    return 0;
}






2008-12-12 02:23
crowkkk
Rank: 1
等 级:新手上路
帖 子:65
专家分:0
注 册:2008-11-28
收藏
得分:0 
谢谢楼上的,我改了自己的代码,OK了
#include <stdio.h>
#include <string.h>
main()
{
      char names[10][15],*tmp;
      int i;
      for (i=0;i<10;i++)
      {
          printf("请输入第%d个人的姓名:",i+1);
          scanf("%s",&names[i]);
      }
      int j;
      for (i=0;i<9;i++)
        for (j=i+1;j<10;j++)
          if (strcmp(names[i],names[j])>0)
          {
            strcpy(tmp,names[i]);
            strcpy(names[i],names[j]);
            strcpy(names[j],tmp);
          }
      printf("\n排序后顺序:");
      for (i=0;i<10;i++)
        printf("\n%2d: %s",i+1,names[i]);
}
但是我想知道如果自己写strcmp函数,按我下面的方法是哪里出错了
...
  for (i=0;i<9;i++)
    for (j=i+1;j<10;j++)
      for (c=0;c<15&&name[i][c]==name[j][c]=='\0';c++)
        if (names[i][c]>name[j][c]||name[j][c]=='\0')
        {
          char b[15];
          for (c=0;c<15;c++)
            b[c]=name[i][c];
          for (c=0;c<15;c++)
            name[i][c]=name[j][c];
          for (c=0;c<15;c++)
            name[j][c]=b[c];
          break;
         }
         else if(name[i][c]<name[j][c]||name[i][c]=='\0')
           break;
...

while (1)
    学习;
2008-12-12 13:21
crowkkk
Rank: 1
等 级:新手上路
帖 子:65
专家分:0
注 册:2008-11-28
收藏
得分:0 
晕,怎么发了三遍

while (1)
    学习;
2008-12-12 13:24
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
没找到 strcmp 的源代码,自己写了一个,谨作参考。

程序代码:
#include<stdio.h>
int STRCMP(char *a,char *b)
{
    for(;(*a&&*b)&&(*a==*b);a++,b++);
    return (*a-*b);
}
int main(void)
{
    int i;
    char a[100],b[100];
    gets(a);
    gets(b);
    i=STRCMP(a,b);
    if(i==0)    puts("a=b");
    else    printf("a%cb\n",i>0?'>':'<');
    return 0;
}
2008-12-12 14:23
crowkkk
Rank: 1
等 级:新手上路
帖 子:65
专家分:0
注 册:2008-11-28
收藏
得分:0 
是版主回复的,没看清啊,失敬,谢谢你们回复,这段代码很精巧,
但有(*a&&*b)不太明白,是都不能为\0的意思吗?

while (1)
    学习;
2008-12-13 00:55
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
回复 第7楼 crowkkk 的帖子
yes. *a为真,而且*b为真,而且*a==*b。
2008-12-13 01:15
快速回复:字符串数组排序, 高人请看一下
数据加载中...
 
   



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

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