在我的代码中,我创建了一个字符串,然后将该字符串推送到堆栈中。 (我不知道我是否正确使用它,因为我不熟悉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() << '>' ;
}
答案 0 :(得分:4)
在你的代码3问题:
nextWord.push(str[i+1]);
您尝试将char放入堆栈而不是字符串。
您需要更改堆栈类型:
stack<char> nextWord;
或者在放入堆栈之前将char转换为字符串,例如:
string tmp = "";
tmp += str[i+1];
nextWord.push(tmp);
无尽的循环:
while (!nextWord.empty()) {
cout << "String: " << nextWord.top();
}
stack.top()
- 只返回堆栈顶部的值
传递你需要的所有元素,在循环体中添加调用stack.pop(),例如:
while (!nextWord.empty()) {
cout << "String: " << nextWord.top();
nextWord.pop();
}
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]