class Node_Str{
public:
string name;
string value;
string type;
Node_Str(string name,string value,string type){
name=name;
value=value;
type=type;}};
static stack<Node_Str> s;
void find_token(string input){
int cursor=0;
string current="";
while(cursor<input.length()){
char value;
value=input[cursor];
cout<<value<<endl;
if(value=='('||value==')'||value=='+'||value=='-
'||value=='*'||value=='/'){
Node_Str* p=new Node_Str("pare",string(1,value),"Pare");
s.push(*p);
cursor++;
delete p;}
if(value==' '){
cursor++;
}
if(value=='1'||value=='2'||value=='3'||value=='4'){
Node_Str* p=new Node_Str("num",string(1,value),"Number");
s.push(*p);
cursor++;
delete p;}}}
int main(){
while(!s.empty()){
cout<<s.top().value<<" ";
s.pop(); }
return 0; }
find_token函数应该用白色空格分隔输入字符串,并用该字符串的值构造Node_Str
对象。然后在
主要功能,我想打印出来。人物是有限的。只是'1','2','3','4','+',' - ','*','/'。
输入为4 + 4,输出应为4 + 4。但是,没有输出。
答案 0 :(得分:0)
评论已经说过关于内存泄漏和忘记调用find。
除此之外,堆栈是一个容器,其中最后被推入的容器将是第一个被弹出的容器。为了输出0 1 2 3,你需要按照3 2 1 0的顺序推入堆栈。
只是提供更好的版本。
#include <iostream>
#include <stack>
using std::cout;
using std::stack;
static stack<int> s;
void find()
{
int* p;
for (int i = 3; i >= 0; i--) {
p = new int(i);
s.push(*p);
delete p; // p itself does not have to be returned so it can be safely deleted here
//This can also ne replaced by directly using s.push(i)
}
}
int main() {
find();
while (!s.empty())
{
cout << s.top() << " ";
s.pop();
}
return 0;
}
答案 1 :(得分:0)