我們舉個例子來說明:去掉else後問題出在哪裏,為什麽結果是錯的。還是A [0] = "12345 ",A[1]= " 12452 ";
前兩個相等,所以如果不做。a[1]的第三個和第四個值較大,循環應該已經在這裏結束了,所以不再做比較,但是因為刪除了else語句,所以循環仍然執行。但是因為條件不成立,而只有j++;+;到第五位時,由於a[0]為5,a[1]為2,滿足if的條件,所以a[0]和a[1]互換,但這顯然是錯誤的。因為a[1]的前四項有大於a[0]的數,所以早該結束循環而不比較第五個數了。
我不小心,呵呵,差點誤導妳!真的很抱歉。現在解釋可以了吧?我仔細分析過了,應該沒有問題。
附:
改進建議:如果您知道strcpy()函數,為什麽要使用第三個for來循環逐字符比較呢?可以使用strcmp()進行直接比較,這樣就省去了第三個for語句。
改進後的代碼如下,供參考:
#包含“stdio.h”
#包含" string.h "
void main(){
char b[20],a[5][20];
int i,j;
printf(" input:\ n ");
for(I = 0;我& lt5;i++)
獲取(a[I]);
for(I = 0;我& lt5;i++){
for(j = I+1;j & lt5;j++){
if(strcmp(a[i],a[j])& gt;0){
strcpy(b,a[j]);
strcpy(a[j],a[I]);
strcpy(a[i],b);
}
}
}
printf(" \ n \ n排序結果為:\ n \ n ");
for(I = 0;我& lt5;i++)
puts(a[I]);
}
這樣更清楚嗎?和壹般的整數數組排序差不多吧?哈哈!
strcmp的具體說明:
int strcmp(const char * string 1,const dhar * string 2);
按照字典順序比較字符串string1和string2。如果string1在string2之前,返回值小於0;如果string1和string2相等,返回值為0;如果string1在string2之後,返回值大於0;