帮忙改一下 C++
高手们,帮忙改一下;
#include "stack.h"
#include <math.h>
#include<fstream>
int change(char theta)
{
switch(theta)
{
case '+':
return 0;
break;
case '-':
return 1;
break;
case '*':
return 2;
break;
case '/':
return 3;
break;
case '(':
return 4;
break;
case ')':
return 5;
break;
case '#':
return 6;
break;
}
return 0;
}
int Precede(char theta1,char theta2)
{
int a[7][7]={3,3,1,1,1,3,3,3,3,1,1,1,3,3,3,3,3,3,1,3,3,3,3,3,3,1,3,3,1,1,1,1,1,2,0,3,3,3,3,0,3,3,1,1,1,1,1,0,2};
return(a[change(theta1)][change(theta2)]);
}
float Operate(float a,char theta,float b)
{
switch(theta)
{
case '+':
return(a+b);
break;
case '-':
return(a-b);
break;
case '*':
return(a*b);
break;
case '/':
return(a/b);
break;
}
return 0;
}
int main()
{
float number=0;
char c,x;
int dot=0;
int mark=0;
char theta;
float a,b;
stack<char> *OPTR;
stack<float> *OPND;
OPTR=InitStack <char> ();
OPND=InitStack <float> ();
fstream infile;
fstream outfile;
infile.open("input.txt",ios::in);
if(!infile)
{
cout<<"文件打开失败"<<endl;
exit(0);
}
outfile.open("output.txt",ios::out);
if(!outfile)
{
cout<<"文件打开失败"<<endl;
exit(0);
}
while(infile.get(c),!infile.eof())
{
Push <char> (OPTR,'#');
outfile<<"OPTR: ";
StackTraverse<char>(OPTR,outfile);
outfile<<"OPND: ";
StackTraverse<float>(OPND,outfile);
outfile<<"---------------------------------------------"<<endl;
while(c!='#'||GetTop <char> (OPTR)!='#')
{
while((c>='0'&&c<='9')||c=='.')
{
mark=1;
if(c=='.')
dot=1;
else
{
if(dot==0)
number=number*10+(c-48);
else
{
number=number+(c-48)*pow(10,(-dot));
dot++;
}
}
infile.get(c);
}
if(mark==1)
{
Push <float> (OPND,number);
outfile<<"OPTR: ";
StackTraverse<char>(OPTR,outfile);
outfile<<"OPND: ";
StackTraverse<float>(OPND,outfile);
outfile<<"---------------------------------------------"<<endl;
number=0;
mark=0;
dot=0;
}
switch(Precede(GetTop<char>(OPTR),c))
{
case 1:
Push<char>(OPTR,c);
outfile<<"OPTR: ";
StackTraverse<char>(OPTR,outfile);
outfile<<"OPND: ";
StackTraverse<float>(OPND,outfile);
outfile<<"---------------------------------------------"<<endl;
infile.get(c);
break;
case 2:
Pop<char>(OPTR,x);
outfile<<"OPTR: ";
StackTraverse<char>(OPTR,outfile);
outfile<<"OPND: ";
StackTraverse<float>(OPND,outfile);
outfile<<"---------------------------------------------"<<endl;
infile.get(c);
break;
case 3:
Pop<char>(OPTR,theta);
outfile<<"OPTR: ";
StackTraverse<char>(OPTR,outfile);
outfile<<"OPND: ";
StackTraverse<float>(OPND,outfile);
outfile<<"---------------------------------------------"<<endl;
Pop<float>(OPND,b);
outfile<<"OPTR: ";
StackTraverse<char>(OPTR,outfile);
outfile<<"OPND: ";
StackTraverse<float>(OPND,outfile);
outfile<<"---------------------------------------------"<<endl;
Pop<float>(OPND,a);
outfile<<"OPTR: ";
StackTraverse<char>(OPTR,outfile);
outfile<<"OPND: ";
StackTraverse<float>(OPND,outfile);
outfile<<"---------------------------------------------"<<endl;
Push<float>(OPND,Operate(a,theta,b));
outfile<<"OPTR: ";
StackTraverse<char>(OPTR,outfile);
outfile<<"OPND: ";
StackTraverse<float>(OPND,outfile);
outfile<<"---------------------------------------------"<<endl;
break;
}
}
outfile<<GetTop<float>(OPND)<<endl;
outfile<<"*********************************************"<<endl;
ClearStack<char>(OPTR);
ClearStack<float>(OPND);
}
infile.close();
outfile.close();
return 0;
}
}
}
另一个头文件:
#include<iostream>
#include<malloc.h>
#include<fstream>
using namespace std;
template <class T>
struct stack
{
T num;
stack<T> *next;
};
template <class T>
stack<T> *InitStack()
{
stack<T> *head=(stack<T> *)malloc(sizeof(stack<T>));
head->next=NULL;
return head;
}
template <class T>
void ClearStack(stack<T>* &p)
{
stack<T> *p1=p,*p2=p;
while(p1->next)
{
p1=p2->next;
free(p2);
p2=p1;
}
p2->num=0;
p=p2;
}
template <class T>
T StackEmpty(stack<T> *p)
{
if(p->next)
return 0;
else
return 1;
}
template <class T>
T StackLength(stack<T> *p)
{
T n=0;
while(p->next)
{
n++;
p=p->next;
}
return n;
}
template <class T>
T GetTop(stack<T> *p)
{
while(p->next)
p=p->next;
return p->num;
}
template <class T>
void Push(stack<T> *p,T e)
{
while(p->next)
p=p->next;
stack<T> *p1=(stack<T> *)malloc(sizeof(stack<T>));
p1->num=e;
p1->next=NULL;
p->next=p1;
}
template <class T>
void Pop(stack<T> *p,T &f)
{
T e=0;
stack<T> *p1=NULL;
while(p->next)
{
p1=p;
p=p->next;
}
e=p->num;
p1->next=NULL;
free(p);
f=e;
}
template<class T>
void StackTraverse(stack<T> *p,ostream& opt)
{
while(p->next)
{
p=p->next;
opt<<p->num<<" ";
}
opt<<endl;
}
错误为
F:\C\asd1.cpp(337) : error C2143: syntax error : missing ';' before '}'
F:\C\asd1.cpp(337) : error C2143: syntax error : missing ';' before '}'
F:\C\asd1.cpp(337) : error C2143: syntax error : missing ';' before '}'
F:\C\asd1.cpp(338) : error C2143: syntax error : missing ';' before '}'
F:\C\asd1.cpp(338) : error C2143: syntax error : missing ';' before '}'