📄 fun.cpp
字号:
#include "stdafx.h"
#include "fun.h"
#include "string.h"
#include "malloc.h"
#include <process.h>
Status ReadExpr(Tree &T){
int flag=1,i,m,n,n1,n2,j;//m计算运算符的数目,n计算数据的数目
while(flag){//确保输入正确的表达式
flag=0;m=0,n=0,n1=0,n2=0,j=0;
printf("\n输入表达式:");
fflush(stdin);
scanf("%s",a);
//printf("\n%s",a);
for(i=0;a[i]!='\0';++i){
if(a[i]=='+'||a[i]=='-'||a[i]=='*'||a[i]=='/'||a[i]=='^')
m++;
else if(a[i]>='0'&&a[i]<='9')
n1++;
else if(a[i]>='a'&&a[i]<='z'){
n2++;b[j]=a[i];j++;
}
else{ //非合法字符
printf("\n输入字符非法,请重新输入表达式");
flag=1;break;
}
n=n1+n2;
if(n>m+1){
printf("输入的表达式错误,请重新输入");
flag=1;break;
}
if(a[i+1]=='\0')
if(n!=m+1){
printf("输入的表达式错误,请重新输入");
flag=1;break;
}
}//for
b[j]='\0';
}//while
//printf("输入成功");
k=0;
CreateTree(T);
//printf("建树成功");
//printf("\n按任意键继续....");
//fflush(stdin);
//getchar();
return OK;
}
Status Assign(Tree &T,char v,char c){
if(T){
if((T->data)==v) T->data=c;
Assign(T->lchild,v,c);
Assign(T->rchild,v,c);
}
return OK;
}
Status WriteExpr(Tree T){
if(T){
if(T->lchild!=NULL)
printf("(");
WriteExpr(T->lchild);
printf("%c",T->data);
WriteExpr(T->rchild);
if(T->rchild!=NULL)
printf(")");
}
return OK;
}
Status Value(Tree T){
int sum=0,sum1=0,sum2=0,i;char c;
if(T==NULL)
sum=0;
else{
c=T->data;
if((c>='0'&&c<='9')||(c>='a'&&c<='z')){
if(c>='a'&&c<='z')
c=0;
if(c>='0'&&c<='9')
c=c-48;
sum=(int)c;
}
else if(c=='+'||c=='-'||c=='*'||c=='/'||c=='^'){
sum1=Value(T->lchild);
//printf("树1的值%d",sum1);
sum2=Value(T->rchild);
//printf("树2的值%d",sum2);
if(c=='+')sum=sum1+sum2;
else if(c=='-')sum=sum1-sum2;
else if(c=='*')sum=sum1*sum2;
else if(c=='/')sum=sum1/sum2;
else if(c=='^'){
sum=1;
for(i=1;i<=sum2;++i)
sum=sum*sum1;
}
}
}
return sum;
}
Tree CompoundExpr(char P,Tree E1,Tree E2){
Tree T;char bb[20];
printf("\n表达式1:");
ReadExpr(E1);
strcpy(bb,b);
printf("\n表达式2:");
ReadExpr(E2);
strcpy(b,strcat(bb,b));
if(!(T=(ThrNode *)malloc(sizeof(ThrNode)))) exit(-2);
T->data=P;
T->lchild=E1;
T->rchild=E2;
printf("\n复合表达式为:");
WriteExpr(T);
return T;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -