2017-04-01 48 views
1

我想根據它們的長度對包含名稱的數組進行排序,但是當我嘗試使用函數交換它們時,以下程序會給出編譯器錯誤。請幫助我確定我的錯誤。在C++中使用2d數組交換

void sort(char name1[][50]) 
{ 
    for (int i = 0; i < 5; i++) 
    { 
     if (strlen(name1[i])>strlen(name1[i+1])) 
     { 
      char temp[50]; 
      temp=name1[i]; 
      name1[i]=name1[i+1]; 
      name1[i+1]=temp;  
     } 
    } 
} 
+0

如果使用'std :: string',它會更容易做到。 –

+0

請注意,這不是一個完整的排序。一般來說,您需要對數組進行多次傳遞才能完全排序數據。如果你傳入['「abcde」','「abcd」','「abc」','「ab」','「a」'],那麼輸出將是['「abcd」'''abc 「','」ab「',''a」','「abcde」']。 –

回答

0

使用strcpy()到一個陣列複製到其它

void sort(char name1[][50]) 
{ 

    for(int i=0; i< 5; i++) 
    { 
     if(strlen(name1[i])>strlen(name1[i+1])) 
     { 
     char temp[50]; 
     strcpy(temp,name1[i]); 
     strcpy(name1[i],name1[i+1]); 
     strcpy(name1[i+1],temp);  
     } 
    } 
} 
+0

謝謝,你能讓我多瞭解一些簡單的東西,爲什麼我們可以在多維數組中使用循環中的兩個維度輸入輸入,如下所示: \t for(int i = 0; i <5; i ++ ) \t { \t \t \t \t cout <<「enter name」<< i + 1; \t \t cin >> names [i] [50]; \t} – mwbee

+0

@mwbee你需要寫cin >> names [i],因爲你輸入的名字是由名字[i]引用的。例如names [0],指的是名字,名字[1]指的是第二個名字。 –

+0

@mwbee如果有幫助,可以將其標記爲正確,以使其對其他用戶更有用 –

0

使用strcpy複製的c-字符串。首先將第一個字符串複製到臨時字符串中,然後將第二個字符串複製到第一個字符串中,最後將temp複製到第二個字符串中。

strcpy(temp,name1[i]); 

strcpy(name1[i],name1[i+1]); 

strcpy(name1[i+1],temp); 
+0

謝謝,請你讓我知道更多簡單的東西,爲什麼我們可以在多維數組中使用循環中的兩個維度輸入數據,如下所示:for(int i = 0; i <5; i ++ ){cout <<「輸入名稱」<>名稱[i] [50]; } – mwbee