2017-04-01 13 views
1

長さに応じて名前を含む配列をソートするとしますが、関数を使用してスワップしようとすると、次のプログラムでコンパイラエラーが発生します。私の間違いを特定するのを手伝ってください。C++で2次元配列を使用したスワップ

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 "' '、' '' ''を渡した場合、出力は '' "abcd" '、' 'abc "、" ab "、" "、" "、" "abcde" '] –

答えて

0

使用strcpy() C-文字列をコピーして他の

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 << "名前を入力し、" << I + 1。 \t \t cin >> names [i] [50]; \t} – mwbee

+0

@mwbee名前[i]で参照される名前を入力するので、cin >> names [i]と記述する必要があります。例えば、名前[0]はファーストネームを参照し、ネーム[1]はファーストネームを参照する。 –

+0

@mwbee他のユーザにとって便利であれば、正しいとマークすることができます –

0

使用strcpyに1列をコピーします。最初の文字列を一時文字列にコピーしてから、最初の文字列を最初の文字列にコピーし、最後にtempを2番目の文字列にコピーします。

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