#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;
}