以下是我的代码。它在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;
}
}
答案 0 :(得分:3)
您正在循环超出字符串的边界。你需要这个:
for (int i=0; i<x.size(); i++){ ... }
类似于内循环。除非字符串为空,否则x.size()
将评估为true
。由于这是循环终止条件,因此对于非空字符串,循环将永远运行。
答案 1 :(得分:0)
你的病情毫无意义。 for循环中的x.size()
部分应该是终止循环的条件。这将始终返回一些非零值,除非您的字符串为0,这意味着您的代码无限执行。然后,j总是递增,你越界。您需要提供有效条件,例如i < x.size()
和j < x.size()
。
答案 2 :(得分: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++){
另外,你会循环不尽