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()函數的功能是讀取字元串,並存放在指定的字元數組中,遇到換行符或文件結束標志時結束讀入。換行符不作為讀取串的內容,讀取的換行符被轉換為字元串結束標志'