You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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;
}

关键说明

  1. 结果变量声明:新增string final_str;用于存储最终拼接后的字符串。
  2. 元素拼接:在弹出栈元素的循环中,每次将栈顶元素追加到final_str,同时添加空格作为元素分隔符,保证结果可读性。
  3. 处理末尾空格:循环结束后通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 14:05:37