2016-04-06 2 views
0

エラーソート文字列配列、およびこれは私がこれまで持っているものです。セグメンテーションフォールト(コアダンプ)私は事前にセット名を使用してアルファベット順に名前を置くコードを書くことになってる

#include <iostream> 
#include <iomanip> 
#include <string> 

using namespace std; 

int main() 

{ 

const int NUM_NAMES = 20; 
string temp;       
string names [NUM_NAMES] = {"Collins, Phil", "Simpson, Bart", "Allen, Jim", 
          "Griffen, Jim", "Stamey, Marty" "Rose, Geri", 
          "Taylor, Swift","Johnson, Jill", "Alison, Jeff", 
          "Looney, Joe", "Wolfe, Bill", "James, Jean", 
          "Weaver, Jim", "Pore, Bob", "Rutherford, Greg", 
          "Ravens, Renee", "Harrison, Rose", "Setzer, Cathy", 
          "Pike, Gordon", "Holland, Beth" }; 


for (int k=0; k < NUM_NAMES; k++) 
{  for (int i=0; i<NUM_NAMES; i++) 
     { 
      if (names[i] > names [i+1]) 
       { 
       temp = names[i]; 
       names [i] = names[i + 1]; 
       names [i + 1] = temp; 
       } 

     } 

} 
cout << names [0] << endl; 

int k = 1; 
int i = 0; 
while (k <= NUM_NAMES) 
{ 
     cout << names [i] << endl; 
k++; 
i++; 
} 


return 0; 
} 

それをエラーなしでコンパイルしますが、実行しようとすると "セグメンテーションフォルト(コアダンプ)"が表示されます...正しい方向のヘルプがあれば幸いです

+4

_'if(名[I]>名[I + 1]) '_'名[I + 1] 'i == NUM​​_NAMES -1'ならば限界を迎えます –

+0

うわー、ありがとう! –

+0

私はあなたにそれを説明するように頼んでもらえますか? 'i'を0に設定すると、配列の位置1を使うと思った。 –

答えて

0

これはあなたのものではなく、行:

names [i+1] = ... 

C++(および他の多くの言語)では、配列は0から索引付けされています。そのため、サイズNの配列は、0からN-1までのインデックスに対して有効です。 forループは0 ... NUM_NAMES - 1を繰り返しますが、最後にはというインデックスi+1を使用します。この問題を解決するための

、あなたが1 ... NUM_NAMES - 1を反復処理できます。names[i-1]names[i]

for (int k=1; k < NUM_NAMES; k++) 

と仕事を:

if (names[i-1] > names [i]) 
{ 
    temp = names[i - 1]; 
    names [i - 1] = names[i]; 
    names [i] = temp; 
} 

(あるいは、それが今であるとして、それを残して、ループの実行条件をk < NUM_NAMES - 1に変更)

はまた、これに代えて:

temp = names[i]; 
names [i] = names[i + 1]; 
names [i + 1] = temp; 

あなたは、単に行うことができます:

std::swap(names[i], names[i + 1]); 
+0

うーん、さて、私は今理解していると思う。だから私はプログラムを終了の方に配列の側面に行くように求めていたのですか? –

+0

基本的には、配列の最後の要素の後にメモリ位置を書き込む(読み出す)ことになりました。 –

+0

ああああ、私のためにそれをクリアしてくれて本当にありがとう、私は大いに感謝する –

関連する問題