當前位置:成語大全網 - 新華字典 - C++編程 輸入5個字符串,按英文字典排序,由小到大順序輸出。 求大神幫我讀壹下下面寫的這個程序

C++編程 輸入5個字符串,按英文字典排序,由小到大順序輸出。 求大神幫我讀壹下下面寫的這個程序

#include?<iostream>

#include?<string.h>

using?namespace?std;

int?main()

{

char?*t[5];?//5個字符串儲存的地址指針

char?*p;//用於記錄字符串地址的指針

int?i,j,min;

cout?<<?"請輸入五個字符串"?<<?endl;

for(i=0;?i<5;?i++)

{

t[i]?=?new?char[20];?//申請字符串儲存的空間

cin?>>?t[i];?//輸入字符串

}

/*?思想:

?*?1.從當前字符串開始,與之後的所有字符串比較,找到最小(即按字母表

?*應該是最靠前的)的字符串即為排在最前面的字符串,則最小字符串與

?*當前字符串換位;

?*?2.從下壹個字符串開始繼續上壹步操作,直到只有壹個字符串剩余為止,

?*(只有壹個字符串剩余就沒什麽好比較的了,所以下面的循環i是從0到

?*4。)

?*/

for(i=0;?i<4;?i++)

{

min?=?i;?//先假設第i個字符串是剩下的字符串中字母最靠前的字符串,其

?//位置為min

for?(j=i+1;?j<5;?j++)//與當前字符串後面的第i+1到第4個字符串相比

?if?(strcmp(t[min,?t[j])>0)//如果t[j]比目前找到的最小字符串還小,說

? min?=?j;//明更小的字符串應該是t[j],當前最小字符串

? //位置應該更新為j,故把j位置記錄給min,再繼

? //續找,?直到跳出循環

?

/*?跳出循環後,min即為當前最小字符串的位置,故t[min]和t[i]交換位置?*/

/*?註意t[i]和t[min]中存放的是地址,交換地址就可以?*/

p?=?t[i];//記錄t[i]字符串的首地址給p指針

t[i]=?t[min];?//把t[min]字符串的首地址賦給t[i],則t[i]中原來的地址被覆蓋了

t[min]?=?p;//把原來t[i]字符串的首地址賦給t[min]

}

cout?<<?endl;

for(i=0;?i<5;?i++)//輸出字符串

cout?<<?t[i]?<<?endl;

for(i=0;?i<5;?i++)//釋放空間

delete?t[i];

return?0;

}