Source code
#include <bits/stdc++.h>
using namespace std;
string prefix;
int op=0,eql=0,brkt=0;
int ok=0;
vector<int> dataSaved;
vector<string> charSaved;
string ans;
string convertToint(string data)
{
ans.clear();
map<int,string>num1;
num1[1] = "one";
num1[2] = "two";
num1[3] = "three";
num1[4] = "four";
num1[5] = "five";
num1[6] = "six";
num1[7] = "seven";
num1[8] = "eight";
num1[9] = "nine";
num1[10] = "ten";
int div=0;
string a;
for(int i=0; i<data.size(); i++)
{
if(data[i]>='a' && data[i]<='z')
{
div=1;
if(div==1)
{
a +=data[i];
}
}
else
{
div=0;
if(a.size()>0)
{
for(int j=1; j<11; j++)
{
if(a==num1[j])
{
stringstream ss;
ss << j;
string n;
ss>>n;
ans += n;
a.clear();
break;
}
}
}
ans+=data[i];
}
}
if(a.size()>0)
{
for(int j=1; j<11; j++)
{
if(a==num1[j])
{
stringstream ss;
ss << j;
string n;
ss>>n;
ans += n;
a.clear();
break;
}
}
}
// cout<<"Ans writer fun: "<<ans<<endl;
a.clear();
return ans;
}
string writeAns(string str)
{
map<int,string> num1;
num1[1] = "one";
num1[2] = "two";
num1[3] = "three";
num1[4] = "four";
num1[5] = "five";
num1[6] = "six";
num1[7] = "seven";
num1[8] = "eight";
num1[9] = "nine";
num1[10] = "ten";
num1[11] = "eleven";
num1[12] = "twelve";
num1[13] = "thirteen";
num1[14] = "fourteen";
num1[15] = "quarter";
num1[16] = "sixteen";
num1[17] = "seventeen";
num1[18] = "eighteen";
num1[19] = "nineteen";
num1[20] = "twenty";
num1[30] = "thirty";
num1[40] = "fourty";
num1[50] = "fifty";
num1[60] = "sixty";
num1[70] = "seventy";
num1[80] = "eighty";
num1[90] = "ninety";
stringstream ss;
ss << str;
int a ;
ss>>a;
if(a<20)
{
return num1[a];
}
else
{
if(a==20) return num1[20];
else if(a==30) return num1[30];
else if(a==40) return num1[40];
else if(a==50) return num1[50];
else if(a==60) return num1[60];
else if(a==70) return num1[70];
else if(a==80) return num1[80];
else if(a==90) return num1[90];
else if(a>20 && a<30)
{
int m = a%10;
return num1[20]+num1[m];
}
else if(a>30 && a<40)
{
int m = a%10;
return num1[30]+num1[m];
}
else if(a>40 && a<50)
{
int m = a%10;
return num1[40]+num1[m];
}
else if(a>50 && a<60)
{
int m = a%10;
return num1[50]+num1[m];
}
else if(a>60 && a<70)
{
int m = a%10;
return num1[60]+num1[m];
}
else if(a>70 && a<80)
{
int m = a%10;
return num1[70]+num1[m];
}
else if(a>80 && a<90)
{
int m = a%10;
return num1[80]+num1[m];
}
else if(a>90 && a<100)
{
int m = a%10;
return num1[90]+num1[m];
}
}
}
int priority(char c)
{
if(c =='+' || c=='-')
{
return 1;
}
else if(c=='*' || c=='/')
{
return 2;
}
else if( c=='^')
{
return 3;
}
else return 0;
}
void countAll(string str)
{
for(int i=0; i<str.size(); i++)
{
if(str[i]=='+' || str[i]=='-' || str[i]=='*' || str[i]=='/')
{
op++;
}
if(str[i]=='=')
{
eql++;
}
if(str[i]=='(' || str[i]==')')
{
brkt++;
}
}
}
int calculate(int a, int b, char oprt)
{
if(oprt=='+') return a+b;
else if(oprt=='-') return a-b;
else if(oprt=='*') return a*b;
else if(oprt=='/') return a/b;
else if(oprt=='^') return pow(a,b);
}
int eveluate(string str)
{
char c;
int v=0,lastbrkt=0;
stack <int> value;
stack<char> oprt;
cout<<"Do you want to save the data: "<<str<<" (y/n)"<<endl;
cin>>c;
ofstream file;
file.open("outs.txt",ios_base::app);
countAll(str);
if(c=='y')
{
if(op==0 || (op==0 && eql==1))
{
str=writeAns(str);
cout<<str<<endl;
file<<str<<endl;
file.close();
return 0;
}
}
else if(c=='n')
{
file<<"No Data Saved"<<endl;
file.close();
}
string str1;
string var;
if(eql==1)
{
int i=0;
for(i=0; str[i]!='='; i++)
{
var +=str[i];
}
for(i++; i<str.size(); i++)
{
str1 += str[i];
}
}
else
{
str1=str;
}
while(!value.empty())
{
value.pop();
}
while(!oprt.empty())
{
oprt.pop();
}
for(int i = 0; i < str1.length(); i++)
{
if(str1[i] == ' ')
{
continue;
}
else if(str1[i] == '(')
{
oprt.push(str1[i]);
}
else if(isdigit(str1[i]))
{
int val = 0;
while(i < str1.length() && (isdigit(str1[i])==1))
{
val = (val*10) + (str1[i]-'0');
i++;
if(str1[i]=='+' || str1[i]=='-'|| str1[i]=='*' || str1[i]=='/' || str1[i]=='^' || str1[i]==')' )
{
i--;
break;
}
}
value.push(val);
}
else if(str1[i]>='a' && str1[i]<='z')
{
string s;
v++;
s +=str1[i];
for(i++;i<str1.size();i++)
{
if((str1[i]>='a' && str1[i]<='z'))
{
s+=str1[i];
}
else
{
i--;
break;
}
}
int a;// = searchVar(s);
if(a==-1)
{
return 0;
}
else
{
str1[i]= (char)a;
value.push(a);
}
}
else if(str1[i] == ')')
{
lastbrkt=i;
while(!oprt.empty() && oprt.top() != '(')
{
int val2 = value.top();
value.pop();
int val1 = value.top();
value.pop();
char op = oprt.top();
oprt.pop();
value.push(calculate(val1, val2, op));
}
oprt.pop();
}
else
{
while(!oprt.empty() && priority(oprt.top())>= priority(str1[i]))
{
int val2 = value.top();
value.pop();
int val1 = value.top();
value.pop();
char op = oprt.top();
oprt.pop();
value.push(calculate(val1, val2, op));
}
oprt.push(str1[i]);
}
}
if(v>1)
{
while(!oprt.empty())
{
char op = oprt.top();
oprt.pop();
}
}
if(brkt<1)
{
while(!oprt.empty())
{
int val2 = value.top();
value.pop();
int val1=value.top();
value.pop();
char op = oprt.top();
oprt.pop();
value.push(calculate(val1, val2, op));
}
}
if(lastbrkt!=str1.size()-2)
{
while(!oprt.empty())
{
int val2 = value.top();
value.pop();
int val1=value.top();
value.pop();
char op = oprt.top();
oprt.pop();
value.push(calculate(val1, val2, op));
}
}
int ans = value.top();
// cout<<"Ans: "<<ans<<endl;
if(c=='y')
{
// cout<<ans<<endl;
stringstream ss;
ss<<ans;
string s;
ss>>s;
s=writeAns(s);
file<<s<<endl;
file.close();
return 0;
}
else if(c=='n')
{
file<<"No Data Saved"<<endl;
file.close();
}
}
int findError(string str)
{
if(str[str.size()-1] !=';')
{
cout<<"Messing ';' For: "<<str<<endl;
return 0;
}
for(int i=0; i<str.size(); i++)
{
if((str[i]=='+' || str[i]=='-'|| str[i]=='*' || str[i]=='/') && (str[i-1]=='+' || str[i-1]=='-'|| str[i-1]=='*' || str[i-1]=='/') )
{
cout<<"Double Operator For: "<<str<<endl;
return 0;
}
if(str[i]==')')
{
if(str[i+1]!=';')
{
if(str[i+1]=='+' || str[i+1]=='-' || str[i+1]=='*' || str[i+1]=='/')
{
continue;
}
else
{
cout<<"Wrong input formate For: "<<str[i+1]<<endl;
return 0;
}
}
if(str[i-1]=='+' || str[i-1]=='-' || str[i-1]=='*' || str[i-1]=='/')
{
cout<<"Wrong input formate For: "<<str<<endl;
return 0;
}
}
if(str[i]=='(')
{
if(i!=0)
{
if(str[i-1]=='+' || str[i-1]=='-' || str[i-1]=='*' || str[i-1]=='/')
{
continue;
}
else
{
cout<<"Wrong input formate For: "<<str<<endl;
return 0;
}
}
if(str[i+1]=='+' || str[i+1]=='-' || str[i+1]=='*' || str[i+1]=='/')
{
cout<<"Wrong input formate For: "<<str<<endl;
return 0;
}
}
}
if(str[str.size()-2]=='+' || str[str.size()-2]=='-' || str[str.size()-2]=='*' || str[str.size()-2]=='/' || str[0]=='+' || str[0]=='-' || str[0]=='*' || str[0]=='/')
{
cout<<"Wrong input formate For: "<<str<<endl;
return 0;
}
ok=1;
}
int main()
{
ifstream file;
file.open("ins.txt");
// writeAns("74") ;
while(!file.eof())
{
string data;
getline(file, data);
// cout<<"Data111: "<<data<<endl;
string d=convertToint(data);
// cout<<"Data: "<<d<<endl;
findError(d);
// cout<<"Data: "<<data<<endl;
if(ok==1)
{
data[data.size()-1]='