为什么我在从G ++此错误消息?(Why am I having this error messag

2019-10-17 08:03发布

下面是我的代码。 它编译于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;
    }

}

Answer 1:

你是循环超过字符串的范围。 你需要这个:

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

类似地,对于内环。 x.size()将评估为true ,除非该字符串为空。 由于这是循环的终止条件,则循环将用于非空字符串永远运行。



Answer 2:

你的情况是没有意义的。 这x.size()在你的一部分循环应该是终止您的循环的条件。 这将始终返回一些非零值,除非你的字符串是0,这意味着你的代码执行无限。 然后,J总是增量和你去出界。 需要提供有效的条件如i < x.size()j < x.size()



Answer 3:

你的条件是错误的。 更换

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++){

otherwhise你将循环endlessy



文章来源: Why am I having this error message from g++?
标签: c++ g++ iostream