输入有限个字符串,先按字符串长度排序,若长度一样,再按字母顺序排序,并将其输出

 我来答
DoramiHe
推荐于2018-03-29 · 知道合伙人互联网行家
DoramiHe
知道合伙人互联网行家
采纳数:25332 获赞数:59543
2011年中山职业技术学院毕业,现担任毅衣公司京东小二

向TA提问 私信TA
展开全部

设允许输入10个字符串,长度限制为50个字符以内,用char型二维数组记载。另声明一个10个元素的char *型指针数组,使每个元素对应指向前述每个字符串,排序时只交换指针而不拷贝字符串。代码如下:

#include "stdio.h"
#include "string.h"
int main(int argc,char *argv[]){
char s[10][51],*ps[10]={s[0],s[1],s[2],s[3],s[4],s[5],s[6],s[7],s[8],s[9]},*p;
int i,j,k,t;
printf("Input 10 strings...\n");
for(i=0;i<10;scanf("%50s",s[i++]));//输入10个字符串
for(i=0;i<10;i++){//选择排序
for(k=i,j=k+1;j<10;j++)
//下一句按长度或等长时大小判断
if((t=strlen(ps[k])-strlen(ps[j]))>0 || (t==0 && strcmp(ps[k],ps[j])>0))
k=j;
if(k-i)
p=ps[k],ps[k]=ps[i],ps[i]=p;//只交换指针
printf("%s\n",ps[i]);//输出
}
return 0;
}

运行样例如下:

伏从灵000
2015-10-21 · TA获得超过234个赞
知道小有建树答主
回答量:183
采纳率:0%
帮助的人:176万
展开全部
昨天答了个和你一样的问题。
这里是我的回答:
http://zhidao.baidu.com/question/938841872131408332

供你参考。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
itunes0004
2018-03-29 · TA获得超过4046个赞
知道大有可为答主
回答量:2685
采纳率:69%
帮助的人:533万
展开全部
好好好。你先写一个框架,我帮你改改,这样你更能多学到点东西。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
做而论道
高能答主

2015-10-21 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:8321万
展开全部
是要编程吗?
楼主用的什么语言?
追问
C语言
追答

看到了采纳答案。

觉得,有些繁杂,实际上,用不着倒腾各字符串的内容。

建立一个索引,即可。


//参考下列程序:

void main(void)
{
    char  a[7][80] = {    //内定字符串
    {"0_Sunday"},   {"1_Monday"}, {"2_Tuesday"}, 
    {"3_Wednesday"}, {"4_Thursday"}, {"5_Friday"},
    {"6_Saturday"}};
    char  b[7] = {0, 1, 2, 3, 4, 5, 6};   //索引表
    char  *p1, *p2;
    char  i, j, k, l1, l2, t;
//-------冒泡法排序
    for (i = 0; i < 6; i++)
      for (j = 0; j < (7 - i - 1); j++)  {
        p1 = a[b[j]];      l1 = strlen(p1); //取长度
        p2 = a[b[j + 1]];  l2 = strlen(p2);
        if (l1 < l2)                 //长度不同
  {t = b[j]; b[j] = b[j + 1]; b[j + 1] = t;} //交换
        else  if (l1 == l2)          //长度相同
          for (k = 0; k < l1; k++)   //逐个字符比较
            if (*(p1 + k) < *(p2 + k))
  {t = b[j]; b[j] = b[j + 1]; b[j + 1] = t; break;}
      }
//-------//排序结束
    printf("after sort: \n"); //排序后
    for (i = 0; i < 7; i++)
      printf("%s\n", a[b[i]]);//显示各个串
}

 本程序执行后,显示:

after sort:
3_Wednesday
6_Saturday
4_Thursday
2_Tuesday
5_Friday
1_Monday
0_Sunday
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式