从char到string的转换无效

时间:2015-12-05 05:35:31

标签: c++ string char stack

在我的代码中,我创建了一个字符串,然后将该字符串推送到堆栈中。 (我不知道我是否正确使用它,因为我不熟悉C ++和堆栈的概念) 但是当我尝试顶部(我认为这会输出堆栈中的第一个元素)时,它无法正常工作。我从char到string得到转换问题。即使我把它作为char投射它也不能正常工作。 有没有办法转换它? 我想把它拿出去。

我一直收到错误:

C:\ main.cpp:15:37:错误:来自' char'的用户定义转换无效to' std :: stack> :: value_type&& {aka std :: basic_string&&}' [-fpermissive]              nextWord.push(str [i + 1]);

#include <iostream>
#include <iomanip>
#include <map>
#include <string.h>
#include <stack>

using namespace std;

int main(){
std::stack<string> nextWord;
string str = "T<h>is is a test";

for(int i = 0; i < str.length(); i++){
    if (str[i + 2] == '>' && str[i] ==  '<'){
        nextWord.push(str[i + 1]);
    }
}
while (!nextWord.empty()) {
    cout << "String: " << nextWord.top();;
}

cout << nextWord.pop() << '>' ;
}

3 个答案:

答案 0 :(得分:4)

在你的代码3问题:

  1. nextWord.push(str[i+1]);您尝试将char放入堆栈而不是字符串。 您需要更改堆栈类型:         stack<char> nextWord; 或者在放入堆栈之前将char转换为字符串,例如:

        string tmp = "";
    
        tmp += str[i+1];
    
        nextWord.push(tmp);
    
  2. 无尽的循环:

        while (!nextWord.empty()) {
         cout << "String: " << nextWord.top();
        }
    

    stack.top() - 只返回堆栈顶部的值

    传递你需要的所有元素,在循环体中添加调用stack.pop(),例如:

        while (!nextWord.empty()) {
            cout << "String: " << nextWord.top();
            nextWord.pop();
        }
    
  3. cout << nextWord.pop() << '>' ; stack.pop()的返回类型为void。你不能这样写。

答案 1 :(得分:1)

stack :: pop的返回值为void。为了从堆栈中获取值,请使用top,然后调用pop。

cout << nextWord.top() << ">";
nextWord.pop();

当你推弦时,你需要推弦,而不是字符,即

nextWord.push(str);

另外#include <string>代替string.h

答案 2 :(得分:1)

问题在于这一行:

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" />

nextWord.push(str[i + 1]); char ,您正试图将其推送到字符串堆栈。把它改成这个,它应该可以正常工作:

str[i + 1]