A. 字符串数组排序(c语言)(qsort库函数)
声明一个字符串指针数组存放每个字符串的首地址,调用库函数qusort按题目要求对字符串指针排序,不移动源字符串。关键是要设计一个好的比较函数,精巧地解决“按长度、长度相等时按大小”排序的问题。举例代码如下:
//#include"stdafx.h"//Ifthevc++6.0,withthisline.
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#defineN10 //字符串个数
#defineLN21 //限制字符串长度为20
intmycmp(constvoid*a,constvoid*b){//比较函数
char*pa=*(char**)a,*pb=*(char**)b;
intx=int(strlen(pa)-strlen(pb));//依长度比较
returnx?x:strcmp(pa,pb);//长度相等时依大小比较
}
intmain(void){
inti=0,j=0;
char*f[N],w[LN*N];//声明指针数组f和字符串总空间
printf("Input%dstring(s)(length<=%d)... ",N,LN);
while(i<N){//输入并将字符串首址赋给f[i]
if(scanf("%[1234567890]",f[i]=w+j)>0&&strlen(f[i])<LN)
i++,j+=LN;
elseprintf("Error,redo:Requiredlengthlessthan%d:",LN);
}
qsort(f,N,sizeof(char*),mycmp);//调用库函数对字符串指针排序
for(i=0;i<N;printf("%s ",f[i++]));//输出...
return0;
}
B. 字符串数组排序(C语言)(qsort库函数)
#include
#include
#include
#define
N
5
#define
SIZE
100
int
cmpOne(const
void
*a,
const
void
*b)
{
char
*p
=
(char
*)a;
char
*q
=
(char
*)b;
int
m
=
strlen(p);
int
n
=
strlen(q);
if
(m
!=
n)
{
return
(m
-
n);//按串长排序,由小到大
}
else
{
return
(*p
-
*q);//按首字母排序,由小到大
}
}
void
main(void)
{
int
i;
char
str[SIZE][SIZE];
for
(i=0;
i
评论
0
0
0
加载更多
C. c语言字符数组排序问题 看如下代码
#include <stdio.h>
#include <string.h>
int main()
{
char a[100], t;
int i, j, min;
int h = 0;
printf("请输入字符排序 ");
scanf("%s", a);
for (i = 0; a[i] != 0; i++)
{
min = i;
for (j = i + 1; a[j] != 0; j++)
{
if (a[j] < a[min])
min = j;
}
t = a[i];
a[i] = a[min];
a[min] = t;
}
printf("%s", a);
}
D. C语言 字符串数组字典排序
#include<stdio.h>
#include<string.h>
constintMAXLEN=100;
constintMAXSIZE=10;
voidsort(chartitle[][MAXLEN],intn){//排序
inti,j,k;
chartstr[MAXLEN];
for(i=0;i<n-1;++i){
k=i;
for(j=i+1;j<n;++j){
if(strcmp(title[k],title[j])>0)
k=j;
}
if(k!=i){
strcpy(tstr,title[k]);
strcpy(title[k],title[i]);
strcpy(title[i],tstr);
}
}
}
voidshow(chars[][MAXLEN],intn){
inti;
for(i=0;i<n;++i)
printf("%s",s[i]);
puts("");
}
intmain(void){
chars[MAXSIZE][MAXLEN];
inti;
for(i=0;i<MAXSIZE;++i){
printf("string(%02d/%d):",i+1,MAXSIZE);
fgets(s[i],MAXLEN,stdin);
}
printf("排序前: ");
show(s,MAXSIZE);
sort(s,MAXSIZE);
printf("排序后: ");
show(s,MAXSIZE);
return0;
}
E. C语言中如何将10个字符串进行排序
#include<stdio.h>
#include<string.h>
int main()
{
int j,k,i,t,n;
char s[10][10],b[10][10];
for(i=0;i<10;i++)
{
scanf("%s",s[i]);
}
n=strlen(s[1]);
k=0;
for(i=0;i<9;i++)
{
for(j=0;j<9-i;j++)
if(strcmp(s[j],s[j+1])>0)
{
for(k=0;k<n;k++)
b[j][k]=s[j][k];
for(k=0;k<n;k++)
s[j][k]=s[j+1][k];
for(k=0;k<n;k++)
s[j+1][k]=b[j][k];
}
}
for(i=0;i<10;i++)
{
printf("%s ",s[i]);
}
return 0;
}
运行效果:
(5)c语言字符串数组排序扩展阅读:
scanf函数用法:
scanf("输入控制符",输入参数);
功能:将从键盘输入的字符转化为“输入控制符”所规定格式的数据,然后存入以输入参数的值为地址的变量中。
用scanf()函数以%s格式读入的数据不能含有空白符时,所有空白符都被当做数据结束的标志。所以题中函数输出的值只有空格前面的部分。
如果想要输出包括空格在内的所有数据,可以使用gets()函数读入数据。gets()函数的功能是读取字符串,并存放在指定的字符数组中,遇到换行符或文件结束标志时结束读入。换行符不作为读取串的内容,读取的换行符被转换为字符串结束标志'