用二維數(shù)組記錄書名,再聲明一個指針數(shù)組并使各元素分別指向各書名,然后對指針數(shù)組元素按其指向的書名的字典順序排序。這樣比直接拷貝書名的效率會高些。舉例如下:
創(chuàng)新互聯(lián)公司專注于任丘網(wǎng)站建設服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供任丘營銷型網(wǎng)站建設,任丘網(wǎng)站制作、任丘網(wǎng)頁設計、任丘網(wǎng)站官網(wǎng)定制、微信平臺小程序開發(fā)服務,打造任丘網(wǎng)絡公司原創(chuàng)品牌,更為您提供任丘網(wǎng)站排名全網(wǎ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;
}
如果使用的是冒泡排序,那么和整數(shù)排序唯一的不同就是這個部分:
if(a[j]a[j+1])
swap(a[j],a[j+1]);
那么在字符串排序的時候,需要用到一個庫函數(shù)叫strcmp(char a[],char b[]);
這個函數(shù)在cstring庫中[或者c語言中在string.h庫中]
這個函數(shù)的用法就是輸入字符串a(chǎn),b,判斷a,b的字典序大小.
若a的字典序小返回負值
若a的字典序和b相同返回0
若a的字典序大于b的字典序返回正數(shù)
然后你將上面冒泡的部分改一下的話就是:
if(strcmp(a[j],a[j+1])0)
swap(a[j],a[j+1]);
這樣的話就可以實現(xiàn)冒泡排序了.
如果你使用的是系統(tǒng)快排的話,你可以用string,也可以定義一個結(jié)構(gòu)體
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);
...
}
這樣的話也是可以實現(xiàn)的.
#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的儲存空間,數(shù)組的元素數(shù)目是40
printf("what is your name ?\n");//轉(zhuǎn)化說明字符/n換行
scanf("%s,name");//輸入一個字符串,使用了%s的轉(zhuǎn)化修飾符,表示輸入字符串
printf("hello,%s.\n",name);//輸出字符串
return 0;
}
擴展資料
1、兩個字符串,如果兩個字符串相等,則返回0;若str1大于str2(對于大于的理解,是指從兩個字符串的第一個字符開始比較,若兩個字符相同,則繼續(xù)比較,若發(fā)現(xiàn)兩個字符不相等。
2、對于將數(shù)字轉(zhuǎn)換為字符串,c標準中并沒有定義。c標準中沒有定義的原因我覺得是數(shù)字轉(zhuǎn)成字符串可以使用sprintf格式化輸出函數(shù)來完成。
網(wǎng)站題目:c語言中的按字典排序函數(shù) 字典序排序函數(shù)c語言
文章位置:http://jinyejixie.com/article28/hepojp.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、企業(yè)建站、動態(tài)網(wǎng)站、營銷型網(wǎng)站建設、建站公司、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)