接頭辞文字列を中置文字に変換するコードがあります。私はスタックスタックを使用しています。 テスト入力:*/AB + -cdeSTL stack top()関数は、pop()の後でも同じ値を読み取ります。
#include<iostream>
#include<stack>
#include<string.h>
#include<stdlib.h>
using namespace std;
int main()
{
stack<char*> s;
char prefix[100],c;
int l,i,flag[27]={0},pos;
char *o1,*o2,*op,temp[10];
cout<<"Prefix expression : ";
cin>>prefix;
l=strlen(prefix);
op=(char *)malloc(sizeof(char)*10);
o1=new char[10];
o2=new char[10];
for(i=l-1;i>=0;i--)
{
if(prefix[i]>=97 && prefix[i]<=122)
{
if(i!=l-1) cout<<s.top()<<endl;
cout<<"Operand"<<endl;
temp[0]=prefix[i];
temp[1]='\0';
strcpy(op,temp);
s.push(op);
}
else
{
cout<<"Operator"<<endl;
cout<<"Top element : "<<s.top()<<endl;
o1=s.top();
strcpy(temp,o1);
s.pop();
cout<<"Top element : "<<s.top()<<endl;
temp[strlen(temp)]=prefix[i];
o2=s.top();
strcat(temp,o2);
s.pop();
temp[strlen(temp)]='\0';
//cout<<o1<<" "<<o2<<endl;
strcpy(op,temp);
s.push(op);
cout<<op<<endl;
}
}
o1=s.top();
s.pop();
cout<<"Evaluated expression is "<<o1<<endl;
return 0;
}
今O1は、最初のオペランドが検出されるとO2をdを格納することになっている場合、Cを記憶するようになっています。次のように しかし、私が得る出力は、
で誰かが助けてくださいことはできますか?私はあなたのコードで表示さ
あなたは本当に[ 'のstd :: STRING'](http://en.cppreference.com/w/cpp/string/basic_string)sを使用する必要があります。 – NathanOliver
出力を質問に追加します。 –
しかし、私はスタックを使用し、無作為にs.push( "hello")などを挿入するとうまく動作します。 –
Sahitya