1

以下は私のコードです。g ++では正常にコンパイルされますが、常に次の実行時エラーが発生します:セグメンテーション違反(コアダンプ)

私はどこが間違っていますか?

#include<iostream>
#include<string>

using namespace std;

void sort_string(string x){
    for (int i=0;x.size();i++){
                    for(int j=i;x.size();j++){
                            char temp = x[i];
                            if (temp > x[j]){
                                    x[j]=temp;
                                    x[i]=x[j];
                            }
                    }
    }
}


int main(){
    string words;
    cin >> words;

    while (words != " "){
            cout << words << " ";
            sort_string(words);
            cout << words << endl;
    }

}
4

3 に答える 3

3

文字列の境界を超えてループしています。あなたはこれを必要とします:

for (int i=0; i<x.size(); i++){ ... }

内側のループについても同様です。文字列が空でない限り、x.size()に評価されます。trueこれはループの終了条件であるため、空でない文字列に対してループは永久に実行されます。

于 2012-10-14T22:16:13.793 に答える
0

あなたの状態は意味がありません。forループのそのx.size()部分は、ループを終了するための条件である必要があります。文字列が0でない限り、これは常にゼロ以外の値を返します。これは、コードが無限に実行されることを意味します。次に、jは常に増分し、範囲外になります。i < x.size()およびなどの有効な条件を指定する必要がありj < x.size()ます。

于 2012-10-14T22:16:44.843 に答える
0

あなたの条件が間違っています。交換

for (int i=0;x.size();i++){
    for(int j=i;x.size();j++){

for (int i=0; i<x.size();i++){
    for(int j=i; j<x.size();j++){

それ以外の場合は、無限にループします

于 2012-10-14T22:17:04.460 に答える