@
St3ve
Sai quando ho detto "risolvere" le parentesi?
Intendevo questo
PHP:
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int conv_str(string);
float resolve_cast(string);
int main()
{/////////////////////////////////////////////////////////////////
string espressione;
float risultato;
cout<<"inserisci espressione: "; cin>>espressione;
risultato=resolve_cast(espressione);
cout<<risultato<<endl;
}////////////////////////////////////////////////////////////////
float resolve_cast(string esp)
{
string tmp=esp;
vector<char> op;
vector<int> vals;
float ris;
int plus=0;
for(int i=0; i<esp.size(); i++)
{
if(esp[i]=='+' || esp[i]=='-' || esp[i]=='*' || esp[i]=='/')
op.push_back(esp[i]);
}
if(op[0]=='+' || op[0]=='-')
{
op.resize(0);
for(int i=0; i<tmp.size(); i++)
{
if(tmp[i]=='+' || tmp[i]=='-')
{
vals.push_back(conv_str(tmp.substr(0, i)));
tmp=tmp.substr(i+1, (tmp.size()-1));
i=0;
}
}
vals.push_back(conv_str(tmp));
for(int i=0; i<esp.size(); i++)
{
if(esp[i]=='+' || esp[i]=='-')
op.push_back(esp[i]);
}
if(op[0]=='+')
ris=vals[0]+vals[1];
else if(op[0]=='-')
ris=vals[0]-vals[1];
if(vals.size()==2)
return ris;
for(int i=1; i<op.size(); i++)
{
if(op[i]=='+')
ris=ris+vals[i+1];
else if(op[i]=='-')
ris=ris-vals[i+1];
}
return ris;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
else if(op[0]=='*' || op[0]=='/')
{
op.resize(0);
for(int i=0; i<tmp.size(); i++)
{
if(tmp[i]=='*' || tmp[i]=='/')
{
vals.push_back(conv_str(tmp.substr(0, i)));
tmp=tmp.substr(i+1, (tmp.size()-1));
i=0;
}
}
vals.push_back(conv_str(tmp));
for(int i=0; i<esp.size(); i++)
{
if(esp[i]=='*' || esp[i]=='/')
op.push_back(esp[i]);
}
if(op[0]=='*')
ris=vals[0]*vals[1];
else if(op[0]=='/')
ris=vals[0]/vals[1];
if(vals.size()==2)
return ris;
for(int i=1; i<op.size(); i++)
{
if(op[i]=='*')
ris=ris*vals[i+1];
else if(op[i]=='/')
ris=ris/vals[i+1];
}
return ris;
}
}
int conv_str(string s)
{
int num = 0;
for(size_t it = 0; it < s.length(); it++)
{
num *= 10;
num += s[it] - '0';
}
return num;
}
Poi è chiaro che è da migliorare, ma è la mia versione! Credo che il grosso del lavoro stesse qui!
Non è il solver ma sono UNA PARTE, cioè la parte di codice che si occupa di lavorare sulla singola parentesi contenenti iperazioni di pari priorità! Che ne dici?
- - - Updated - - -
forse dovrei rendere resolve_cast() una parametrica (?)