gpt4 book ai didi

c++ - 如何获得堆栈排序的正确输出

转载 作者:行者123 更新时间:2023-11-30 04:43:25 25 4
gpt4 key购买 nike

#include <iostream>
#include <fstream>
#include <stack>
#include <vector>

using namespace std;

void sortStack (stack <int>& s){

int tempVal;
int topElement;

if (s.size()<2){
return;
}

else{
topElement=s.top();
s.pop();


if(topElement < s.top()){
s.push(topElement);
return;
}

else {
tempVal=s.top();
s.top()= topElement;
topElement=tempVal;
sortStack (s);
s.push(topElement);
}
}
}


int main (int argc, char * argv[]){

try {
ifstream inFS;
int fileNumbers;
stack <int> s;


if(argc < 2){
throw runtime_error ("an error occured: no input file name given");
}

inFS.open (argv[1]);
string fileName = argv[1];

if (!inFS.is_open()){
throw runtime_error ("an error occured: could not open input file " + fileName);
}

while (inFS >> fileNumbers){
s.push(fileNumbers);
sortStack(s);
}

for (int i=0; i<=s.size(); i++){
cout << s.top() << " ";
s.pop();

}

inFS.close();
}

catch (runtime_error & excpt){
cout << excpt.what() << endl;
}


return 0;
}

我想对堆栈中文件中的数字进行排序。它必须是一个堆栈,并且必须通过递归来完成。文件中的数字是:4 8 10 3 6 5。除了最后两个元素外,它工作得很好。因此我的输出是:3 4 5 6。它也不对 8 和 10 进行排序。我在 for 循环中执行 s.size+4 它有效,但如果我在文件中只有一个数字,它就不起作用。为什么会这样???

最佳答案

问题出在你的输出过程中:

    for (int i=0; i <= s.size(); i++) {
cout << s.top() << " ";
s.pop();
}

您将 i 与堆栈大小进行比较,但您减少了弹出元素的大小。正确的代码是:

    while (s.size()) {
cout << s.top() << " ";
s.pop();
}

关于c++ - 如何获得堆栈排序的正确输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58292767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com