| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1465 人关注过本帖
标题:在比较多个字符串并排序时, 字符串等长和不等长情况有什么区别?
只看楼主 加入收藏
colinxt
Rank: 2
等 级:论坛游民
帖 子:34
专家分:10
注 册:2010-4-5
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
在比较多个字符串并排序时, 字符串等长和不等长情况有什么区别?
这个是谭浩强的习题,写了两个程序,可惜看不懂
等长时:
程序代码:
#include <stdio.h>
#include <string.h>
void sort(char s[5][6])
{

 int i,j;

 char *p,t[10];

 p=t;

 for (i=0;i<4;i++)

 {
  for (j=0;j<4-i;j++)
  {
   if (strcmp(s[j],s[j+1])>0)
   {
    strcpy(p,s[j]);
    strcpy(s[j],s[j+1]);
    strcpy(s[j+1],p);
   }
  }

 }
}
int main(int argc, char *argv[])
{

 int i;

 char str[5][6];

 printf("enter 10strings:\n");

 for (i=0;i<5;i++)

 {
  scanf("%s",str[i]);

 }

 sort(str);

 printf("now:\n");

 for (i=0;i<5;i++)

 {
  printf("%s\n",str[i]);

 }

 return 0;
}

不等长时:
程序代码:
#include <stdio.h>
#include <string.h>
void sort(char *p[])
{

 int i,j;

 char *t;

 for (i=0;i<4;i++)

 {
  for (j=0;j<4-i;j++)
  {
   if (strcmp(*(p+j),*(p+j+1))>0)
   {
    t=*(p+j);
    *(p+j)=*(p+j+1);
    *(p+j+1)=t;
   }
  }

 }
}
int main(int argc, char *argv[])
{

 int i;

 char *p[5],str[5][20];

 for (i=0;i<5;i++)

 {
  p[i]=str[i];

 }

 printf("enter 10strings:\n");

 for (i=0;i<5;i++)

 {
  scanf("%s",p[i]);

 }

 sort(p);

 printf("now:\n");

 for (i=0;i<5;i++)

 {
  printf("%s\n",p[i]);

 }

 return 0;
}

想知道分别处理等长和不等长的原理是什么?
谢谢!
搜索更多相关主题的帖子: 字符 
2010-04-27 16:49
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:20 
    字符串最后一个字符为结束符,值为 0 .比如两个字符串(A和B)比较,前 11 位都相同,但A串已经结束,而B串没有结束,那么就是B串比较值大.
2010-04-27 17:17
colinxt
Rank: 2
等 级:论坛游民
帖 子:34
专家分:10
注 册:2010-4-5
收藏
得分:0 
回复 2楼 广陵绝唱
哦..有道理..不过这是字符串比较的原理
可能是我没描述清楚...比较想知道的是以上两段代码相比, 不等长的情况使用了指针数组,  为什么这样用就可以处理不等长字符串?
2010-04-28 10:02
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
没看出有什么区别来,都是利用 strcmp 对字符串进行排序,等长的程序也可以排不等长的字符串.

小弟才疏学浅,欢迎高人指点,谢谢.
2010-04-28 15:49
HideBoy
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-04 18:29
实数虚数
Rank: 2
来 自:江西抚州
等 级:论坛游民
帖 子:27
专家分:37
注 册:2010-5-17
收藏
得分:0 
等长时,用str[0.4]表示每一行数组,就不需要管每个数组的长度。
for (i=0;i<4;i++)
{
  for (j=0;j<4-i;j++)
  {
   if (strcmp(s[j],s[j+1])>0)
   {
    strcpy(p,s[j]);
    strcpy(s[j],s[j+1]);
    strcpy(s[j+1],p);
不等长时,设了一个行指针,可以体现每个数组的长度
for (i=0;i<4;i++)
{
  for (j=0;j<4-i;j++)
  {
   if (strcmp(*(p+j),*(p+j+1))>0)
   {
    t=*(p+j);
    *(p+j)=*(p+j+1);
    *(p+j+1)=t;
   }
  }
}
2010-05-23 19:03
快速回复:在比较多个字符串并排序时, 字符串等长和不等长情况有什么区别?
数据加载中...
 
   



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

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