用C语言写一个函数对一个字符型二维数组排序,要求排列时根据字符多少由小到大排列

如这么一个字符数组:str[0]="My",str[1]="At",str[2]="so",str[3]="you",str[4]="You",str[5]="how"。... 如这么一个字符数组:str[0]="My",str[1]="At",str[2]="so",str[3]="you",str[4]="You",str[5]="how"。要求排列后为str[0]="At",str[1]="My",str[2]="so",str[3]="You",str[4]="how",str[5]="you"。望高手解答,谢谢! 展开
 我来答
百度网友9308069
2011-12-10 · TA获得超过1万个赞
知道大有可为答主
回答量:3947
采纳率:89%
帮助的人:2055万
展开全部
C语言版,C99标准
==========
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int icomp(const void* pa, const void* pb){
char *a=(char*)*((char**)pa), *b=(char*)*((char**)pb);
int c;
while(*a || *b){
if(c=tolower(*a)-tolower(*b)) return c;
a++; b++;
}
return (c=tolower(*a)-tolower(*b))?c:0;
}
int main(int argc,char *agv[] )
{
char *str[]={"My", "At", "so", "you", "You", "how"};//等同与str[0]...[1]等等
int i,len=sizeof(str)/sizeof(char*);
qsort(str,len,sizeof(char*),icomp);
for(i=0;i<len;i++)
printf("%d. %s\n",i, str[i]);
return 0;
}
=============
0. At
1. how
2. My
3. so
4. You
5. you

C++11版,也没能化简
==========
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int main(int argc,char *agv[] )
{
char *str[]={
"My","At","so","you","You","how"
};
int i,len=sizeof(str)/sizeof(char*);
sort(str,str+len,
[&](string a,string b)->int{
string la(a),lb(b);
transform(a.begin(),a.end(),la.begin(),::tolower);
transform(b.begin(),b.end(),lb.begin(),::tolower);
int r=la.compare(lb);
return r?r<0:a.compare(b)<0;
}
);
for(i=0;i<len;i++)
printf("%d. %s\n",i, str[i]);
return 0;
}
追问
可是要求输出的是My,so,You,how,you,而不是 At, how,My, so, You,you
追答
引用原题原文“要求排列后为str[0]="At",str[1]="My",str[2]="so",str[3]="You",str[4]="how",str[5]="you"。”
==========
"At","My","so","You","how","you"。
除了那个how位置,其余一致。
应该是出题出错了,把how的位置搞错了,不然没有任何的算法规律,杂乱无章。
我理解成按“不区分大小写的字母顺序”。

将错就错,还是改写了一个这种方式的排序,锻炼一下自己的容错性。
#include
#include
#include
char *str[]={"My", "At", "so", "you", "You", "how"};
char pri[]={1,0,2,5,3,4};
int icomp(const void* pa, const void* pb){
int ia=(char**)pa-(str),ib=(char**)pb-str;
return pri[ia]-pri[ib];
}
int main(int argc,char *agv[] )
{
int i,len=sizeof(str)/sizeof(char*);
qsort(str,len,sizeof(char*),icomp);
for(i=0;i<len;i++)
printf("%d. %s\n",i, str[i]);
return 0;
}
========
0. At
1. My
2. so
3. You
4. how
5. you
415381609
2011-12-10 · 超过10用户采纳过TA的回答
知道答主
回答量:39
采纳率:0%
帮助的人:31.1万
展开全部
str[0]="My",str[1]="At",str[2]="so",str[3]="you",str[4]="You",str[5]="how"。要求排列后为str[0]="At",str[1]="My",str[2]="so",str[3]="You",str[4]="how",str[5]="you"。 帅哥, 这个好像不是二维数组吧???
更多追问追答
追问
是二维字符型数组,原来定义时定义的是str[200][20]
追答
你得完整的题目发过来啊,你这样付值就是付给一个一维的数组,str[0]="My",str[1]="At",str[2]="so"
如果你想付给第一个元素应该这样写str[0][0]=“My"
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式