【问题标题】:How can I assign stack values to string in C++ without reversing the string?如何在不反转字符串的情况下将堆栈值分配给 C++ 中的字符串?
【发布时间】:2021-04-19 10:10:24
【问题描述】:

我想不使用下面使用的方法将堆栈中的值分配给字符串。是否有任何可能的方法/方法可以在 C++ 中执行此操作? *假设堆栈中存在字符值。

stack<char> K;
string ans="";
while(!K.empty()){
ans+=K.top();
K.pop();
}
reverse(ans.begin(),ans.end());
return ans;

提前谢谢你。

【问题讨论】:

  • ans.insert(ans.begin(), K.top()) ?
  • @StPiere OP 的标题专门询问如何在不反转字符串的情况下执行此操作。将ans+=K.top(); 替换为ans.insert(ans.begin(), K.top());,丢弃reverse 调用,并将其余代码保持原样将完全按照要求进行。

标签: c++ string stack


【解决方案1】:

使用 C++11 及更高版本,您可以执行以下操作:

stack<char> K;
string ans;
ans.resize(K.size());
auto it = ans.rbegin(); // use reverse iteration over the string
while (!K.empty()) {
    *it = K.top();
    K.pop();
    ++it;
}

更有效的解决方案是一开始就不使用堆栈。或者,至少,您可以使用自己的堆栈类,允许以正向顺序导出其内容:

class my_char_stack :
    public std::stack<char>
{
public:
    void export_string(std::string& str)
    {
        // std::stack has protected member c, which is the container with
        // its elements stored in forward order
        str.append(c.begin(), c.end());
    }
};

my_char_stack K;
string ans;
K.export_string(ans);

【讨论】:

    【解决方案2】:

    一种在线性时间内完成而不在最后反转的方法:

    string str;
    str.resize(K.size());
    size_t back = str.size() - 1;
    
    while(!K.empty()){
        str[back--] = K.top();
        k.pop();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-22
      • 2017-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-15
      • 2011-07-22
      相关资源
      最近更新 更多