1

下面是我的代码。它在 g++ 中编译得很好,但总是有这个运行时错误:Segmentation fault (core dumped)

我哪里错了?

#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 条件是错误的。代替

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 回答
0

你的情况没有任何意义。for 循环中的那x.size()部分应该是终止循环的条件。这将始终返回一些非零值,除非您的字符串为 0,这意味着您的代码将无限执行。然后, j 总是增加并且你超出界限。您需要提供有效条件,例如i < x.size()and j < x.size()

于 2012-10-14T22:16:44.843 回答