2016-11-29 6 views
0

私はC++を初めて使用しているので、文字列をbubblesortを使用して昇順で表示する必要があります。私はそれにさまざまな文字列を持つデータファイルを持っています。これらの値を配列に格納しました。私がテキストブックからバソソルコードを試したとき、その言葉はこのようにソートされました。C++で文字列を使ってbubblesortを実行する方法は?

これを正しく実装するにはどうすればよいですか?それはおそらく私が紛失している単純なものです。ありがとう。

enter image description here

私はこれがなぜ起こったかわからないが、ここで私はバブルソートのために使用していたコードです。

void sortListWords(string list[], int count) { 
    int temp; 
    for (int i = 0; i < count - 1; i++) 
    for (int j = 0; j < count - (i + 1); j++) 
     if (list[j] > list[j + 1]) { 
     temp = list[j]; 
     list[j] = list[j + 1]; 
     list[j + 1] = temp; 
     } 
    } 

int main(){ 
    // call sorting function 
    // words are loaded from data file 
    sortListWords(wordListing, size); 

    // print array to screen 
    for(int i=0; i<size; i++) 
    cout << wordListing[i]; 

    return 0; 
} 
+1

string temp;へ:

const int size = 4; std::string wordListing[] = {"Hello", "World", "Fred", "John" }; 

出力は次のとおりです。

は最後に、私は(テスト用)あなたのmain関数に最初の2行を追加しました辞書順でソートされていますか?また、 'size'を定義する場所を明確にしてください。 –

+3

'std :: string'の値を入れ替えるために' int'一時変数を使用しているので、これがどのようにコンパイルされるのかわかりません。 –

+0

これは実質的にバブル型の整数と同じコードです。あなたは整数の配列をバブルソートするコードを書くことができますか?もしそうなら、唯一の違いは使用されているタイプでしょう - それ以外のものは同じままです。 – PaulMcKenzie

答えて

1

あなたの例を少し変更しました。あなたが持っているものと比較して、あなたが表示されるはずですしてください、あなたの問題がどこにある:私は特になかった

#include <string> 
#include <iostream> 

void sortListWords(std::string list[], int count) { 
    std::string temp; 
    for (int i = 0; i < count - 1; i++) { 
    for (int j = 0; j < count - (i + 1); j++) { 
     if (list[j] > list[j + 1]) { 
     temp = list[j]; 
     list[j] = list[j + 1]; 
     list[j + 1] = temp; 
     } 
    } 
    } 
} 

int main(){ 
    const int size = 4; 
    std::string wordListing[] = {"Hello", "World", "Fred", "John" };  

    // call sorting function 
    // words are loaded from data file 
    sortListWords(wordListing, size); 

    // print array to screen 
    for(int i=0; i<size; i++) { 
    std::cout << wordListing[i] << '\n'; 
    } 
    return 0; 
} 

何、std::stringintからtempの種類を交換しました。また、可読性を向上させるために、forループの本文に中括弧を追加しました。あなたがそれらをしたいですか

Fred 
Hello 
John 
World 
0

変更このint temp;

+0

あなたは本当に私はアスカーは、std名前空間を使用していると仮定のstd ::文字列 – CodeLikeBeaker

+0

を使用する必要があります。ありがとうございました –

関連する問題