如何从stack中弹出所有字符串并存储到单个string变量中?
实现方法
要把栈中弹出的字符串元素存储到一个最终的string变量里,只需添加一个结果存储变量,在弹出栈元素的过程中依次拼接即可。以下是修改后的完整代码:
#include <sstream> #include <stack> #include <string> #include<iostream> using namespace std; int main() { istringstream iss("abdd hhh |post_exp| a * b / (c + d) ^ f - g |\\post_exp| anndd jjss"); stack <string> mudassir; string subs; // 定义存储最终结果的字符串变量 string final_str; while (iss >> subs) { if (subs == "|post_exp|") { while (iss >> subs && subs.find("|\\post_exp|") == string::npos) { mudassir.push(subs); } } } // 弹出栈元素并拼接至final_str while (!mudassir.empty()) { final_str += mudassir.top(); final_str += " "; // 添加空格分隔元素,避免内容连在一起 mudassir.pop(); } // 可选:移除末尾多余的空格 if (!final_str.empty()) { final_str.pop_back(); } // 输出结果 cout << final_str << endl; return 0; }
关键说明
- 结果变量声明:新增
string final_str;用于存储最终拼接后的字符串。 - 元素拼接:在弹出栈元素的循环中,每次将栈顶元素追加到
final_str,同时添加空格作为元素分隔符,保证结果可读性。 - 处理末尾空格:循环结束后通过
final_str.pop_back()移除最后一个多余的空格(如果不需要分隔符可省略此步骤)。
注意栈的顺序特性
栈是后进先出的数据结构,原代码中压入栈的表达式元素顺序是a、*、b、/、(、c、+、d、)、^、f、-、g,弹出时的顺序会是g、-、f、^、)、d、+、c、(、/、b、*、a,最终拼接结果是原表达式的逆序。如果需要得到原表达式顺序,可先将栈元素转移到另一个栈反转后再拼接:
// 反转栈以获取原表达式顺序 stack<string> temp_stack; while (!mudassir.empty()) { temp_stack.push(mudassir.top()); mudassir.pop(); } // 从反转后的栈中弹出拼接 while (!temp_stack.empty()) { final_str += temp_stack.top(); final_str += " "; temp_stack.pop(); }
内容的提问来源于stack exchange,提问作者Mudassir Waheed
相关产品推荐
相关产品推荐

