用二維數組記錄書名,再聲明一個指針數組并使各元素分別指向各書名,然后對指針數組元素按其指向的書名的字典順序排序。這樣比直接拷貝書名的效率會高些。舉例如下:

創(chuàng)新互聯(lián)公司專注于任丘網站建設服務及定制,我們擁有豐富的企業(yè)做網站經驗。 熱誠為您提供任丘營銷型網站建設,任丘網站制作、任丘網頁設計、任丘網站官網定制、微信平臺小程序開發(fā)服務,打造任丘網絡公司原創(chuàng)品牌,更為您提供任丘網站排名全網營銷落地服務。
//#include?"stdafx.h"http://If?the?vc++6.0,?with?this?line.
#include?"stdio.h"
#include?"string.h"
#define?N?10
void?mysort(char?*s[],int?n){
int?i,j,k;
for(i=0;in;i++){
for(k=i,j=k+1;jn;j++)
if(strcmp(s[k],s[j])0)
k=j;
if(i!=k){
s[i]=(char?*)((unsigned)s[i]^(unsigned)s[k]);//交換指針
s[k]=(char?*)((unsigned)s[k]^(unsigned)s[i]);
s[i]=(char?*)((unsigned)s[i]^(unsigned)s[k]);
}
}
}
int?main(void){
char?book[N][30],*pbook[N];
int?i,k;
for(i=0;iN;pbook[i]=book[i++]);
printf("Please?enter?10?book-name...\n");
for(i=0;iN;pbook[i]=book[i++])
scanf("%s",book+i);
mysort(pbook,N);
for(k=i=0;iN;printf(++k%5???"%s?"?:?"%s\n",pbook[i++]));//打出來看看......
if(k%5)?printf("\n");
return?0;
}
如果使用的是冒泡排序,那么和整數排序唯一的不同就是這個部分:
if(a[j]a[j+1])
swap(a[j],a[j+1]);
那么在字符串排序的時候,需要用到一個庫函數叫strcmp(char a[],char b[]);
這個函數在cstring庫中[或者c語言中在string.h庫中]
這個函數的用法就是輸入字符串a,b,判斷a,b的字典序大小.
若a的字典序小返回負值
若a的字典序和b相同返回0
若a的字典序大于b的字典序返回正數
然后你將上面冒泡的部分改一下的話就是:
if(strcmp(a[j],a[j+1])0)
swap(a[j],a[j+1]);
這樣的話就可以實現冒泡排序了.
如果你使用的是系統(tǒng)快排的話,你可以用string,也可以定義一個結構體
struct?Node{
char?ch[1000];
}s[12];
bool?cmp(const?Node?A,const?Node?B){
return?strcmp(A.ch,B.ch)0;
}
int?main(){
...
sort(s+1,s+10+1,cmp);
...
}
這樣的話也是可以實現的.
#include?stdio.h
#include?string.h
const?int?MAXLEN?=?100;
const?int?MAXSIZE?=?10;
void?sort(char?title[][MAXLEN],int?n)?{//排序
int?i,j,k;
char?tstr[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);
}
}
}
void?show(char?s[][MAXLEN],int?n)?{
int?i;
for(i?=?0;?i??n;?++i)
printf("%s",s[i]);
puts("?");
}
int?main(void)?{
char?s[MAXSIZE][MAXLEN];
int?i;
for(i?=?0;?i??MAXSIZE;?++i)?{
printf("string(%02d/%d):",i?+?1,MAXSIZE);
fgets(s[i],MAXLEN,stdin);
}
printf("排序前:\n");
show(s,MAXSIZE);
sort(s,MAXSIZE);
printf("排序后:\n");
show(s,MAXSIZE);
return?0;
}
將一組字符串按字典順序輸出的源代碼如下:
#include stdio.h
int main ()
{
char name[40] ; //聲明一個叫name的儲存空間,數組的元素數目是40
printf("what is your name ?\n");//轉化說明字符/n換行
scanf("%s,name");//輸入一個字符串,使用了%s的轉化修飾符,表示輸入字符串
printf("hello,%s.\n",name);//輸出字符串
return 0;
}
擴展資料
1、兩個字符串,如果兩個字符串相等,則返回0;若str1大于str2(對于大于的理解,是指從兩個字符串的第一個字符開始比較,若兩個字符相同,則繼續(xù)比較,若發(fā)現兩個字符不相等。
2、對于將數字轉換為字符串,c標準中并沒有定義。c標準中沒有定義的原因我覺得是數字轉成字符串可以使用sprintf格式化輸出函數來完成。
網站題目:c語言中的按字典排序函數 字典序排序函數c語言
文章位置:http://chinadenli.net/article28/hepojp.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供定制網站、企業(yè)建站、動態(tài)網站、營銷型網站建設、建站公司、關鍵詞優(yōu)化
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)