下面是壹個例子:刪除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++)
get(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;如果string2之後是string1,則返回值大於0;