⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dlglog.cpp

📁 实现对输入的算术表达式进行计算,用栈完成此项功能
💻 CPP
字号:
// Dlglog.cpp : implementation file
//

#include "stdafx.h"
#include "biao.h"
#include "Dlglog.h"
#include"fstream.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// Dlglog dialog


Dlglog::Dlglog(CWnd* pParent /*=NULL*/)
	: CDialog(Dlglog::IDD, pParent)
{ //UpdateData(TRUE);
  //m_j="Calculator.out";
 // UpdateData(FALSE);
	//{{AFX_DATA_INIT(Dlglog)
	m_bids = _T("");
	m_jsjg = 0.0f;
	m_xianshi1 = _T("");
	m_j = _T("");
	//}}AFX_DATA_INIT
}


void Dlglog::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(Dlglog)
	DDX_Text(pDX, IDC_EDIT1, m_bids);
	DDX_Text(pDX, IDC_EDIT2, m_jsjg);
	DDX_Text(pDX, IDC_EDIT3, m_xianshi1);
	DDX_Text(pDX, IDC_EDIT4, m_j);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(Dlglog, CDialog)
	//{{AFX_MSG_MAP(Dlglog)
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
	ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// Dlglog message handlers

void Dlglog::OnButton1() 
{  ab=0;
	// TODO: Add your control notification handler code here
	k1=0;k2=0;xu1=0;xu2=0;quan="";jian=0;
	UpdateData(TRUE);
	bds=m_bids;
if(bds.IsEmpty())
MessageBox("请输入表达式");
else
{
if(jiance()==0)
	{
		MessageBox("错误表达式输入");
	}
	

	 else
	{
		int qz=0,j1=0;a.MakeEmpty();b.MakeEmpty();
		 for(int i=0;i<bds.GetLength();i++)
		 {
		     if((bds.GetAt(i)=='(')||(bds.GetAt(i)==')')||(bds.GetAt(i)=='+')||(bds.GetAt(i)=='-')||(bds.GetAt(i)=='*')||(bds.GetAt(i)=='/'))
			 {
				 if((bds.GetAt(0)=='-'&&(i==0))||((i>0)&&(bds.GetAt(i-1)=='(')&&(bds.GetAt(i)=='-')))
				 {
					 jian=1;
				 }
				 else
				 {
			   if(b.IsEmpty()==1)
			   {
					 b.Push(bds.GetAt(i));
					 k2=1;
					 quan=quan+quc1()+CString('\n');
			   }
			   else
			   {
				   int pad=0,pan1=0;
				   do
				   {
					   char bi=bijiao(b.Gettop(),bds.GetAt(i));
					   switch(bi)
					   {
					       case '<':
							   {
							      b.Push(bds.GetAt(i));
							      pan1=1;
							      k2=1;
							      quan=quan+quc1()+CString('\n');
							   }break;
					        case '=':
								{
								   b.Pop();
								   pad=1;
								   k2=2;
								   quan=quan+quc1()+CString('\n');
								}break;
					        case '>':
								{
									char js=b.Gettop();
						                 b.Pop();
									     k2=2;
									     quan=quan+quc1()+CString('\n');
								    float aa1=a.Gettop();
								          a.Pop();
									      k1=2;
										  quan=quan+quc()+CString('\n');
								    float aa2=a.Gettop();
								          a.Pop();
									      k1=2;quan=quan+quc()+CString('\n');
							    	 float jieguo1=yunsuan(aa2,aa1,js);
								          a.Push(jieguo1);
									      k1=1;
									      quan=quan+quc()+CString('\n');
								}break;
					  }
				    }
				   while((pad==0)&&b.IsEmpty()!=1&&pan1==0);
					if(bds.GetAt(i)!=')'&&pan1==0)
					{
						b.Push(bds.GetAt(i));
						k2=1;
						quan=quan+quc1()+CString('\n');
					}
			   }
			 }//字符操作if
		 }
		     else
			  { 
				 qz=qz*10+zhuan(bds.GetAt(i));
			    if(i==bds.GetLength()-1)
				{
					if(jian==0)
					a.Push((float)qz);
				 else
				 {
					 float rr=(float)qz*(-1);
				        a.Push(rr);
						jian=0;
				 }
					    qz=0;
				    	k1=1;
					quan=quan+quc()+CString('\n');
				}
				else
				{
					if((bds.GetAt(i+1)=='(')||(bds.GetAt(i+1)==')')||(bds.GetAt(i+1)=='+')||(bds.GetAt(i+1)=='-')||(bds.GetAt(i+1)=='*')||(bds.GetAt(i+1)=='/'))
					{
						if(jian==0)
						{
							a.Push((float)qz);
						}
						 else
				 {
							 float tt=(float)qz*(-1);
				        a.Push(tt);
						jian=0;
				 }
					   qz=0;
					   k1=1;
					   quan=quan+quc()+CString('\n');
					}	         
				}
			  }//if数据操作
		 }//for
   if(b.IsEmpty()==1)
   {
   }
   else
   {
     do
	 {
		 char js1=b.Gettop();
		      b.Pop();
			  k2=2;
			  quan=quan+quc1()+CString('\n');
		float aaa1=a.Gettop();
		      a.Pop();
			  k1=2;
			  quan=quan+quc()+CString('\n');
		float aaa2=a.Gettop();
              a.Pop();
			  k1=2;
			  quan=quan+quc()+CString('\n');
		float jieguo2=yunsuan(aaa2,aaa1,js1);
		      a.Push(jieguo2);
			  k1=1;
			  quan=quan+quc()+CString('\n');
	 }
	 while(b.IsEmpty()!=1);
   }
  //else
  if(ab==0)
  { 
	  float ddd=a.Gettop();
	       a.Pop();k1=2;quan=quan+quc()+CString('\n');
	       m_jsjg=ddd;
           m_xianshi1=quan;
  }
  else
  {
	  MessageBox("不能出现0做除数的情况");
  }
	   	UpdateData(FALSE);
}
}
du();

}

char Dlglog::bijiao(char a, char b)
{  
	switch(a)
{   
	case ')':
         { 
			 if((b==')')||(b=='('))
			 {return '=';} 
             else return '<';}break;
	  case '+':
		  {
			  if((b=='+')||(b=='-')||(b==')')){return '>';}
			  else{return '<';}
		  }break; 
	  case '-':
		  {
			  if((b=='+')||(b=='-')||(b==')')){return '>';}
			  else{return '<';}
		  }break;
      case '*':
		  {
			  if((b=='(')){return '<';}
			  else return '>';
		  }break;
      case '/':
		  {
			  if((b=='(')){return '<';}
			  else return '>';
		  }break;
	  case '(':
		  {
			  if((b==')')){return '=';}
			  else return '<';
		  }break;
}
}

float Dlglog::yunsuan(float a1, float b1, char c)
{
	float jieguo;
   switch(c)
   {
   case '+':{jieguo=a1+b1;return jieguo;}break;
   case '-':{jieguo=a1-b1;return jieguo;}break;
   case '*':{jieguo=a1*b1;return jieguo;}break;
   case '/':{if(b1==0.0){ab=1;}else{jieguo=a1/b1;return jieguo;}}break;
   }
}

int Dlglog::zhuan(char x)
{
	switch(x)
{   case '0':{return 0;break;}
    case '1':{return 1;break;}
	case '2':{return 2;break;}
	case '3':{return 3;break;}
	case '4':{return 4;break;}
	case '5':{return 5;break;}
	case '6':{return 6;break;}
	case '7':{return 7;break;}
	case '8':{return 8;break;}
	case '9':{return 9;break;}
	case '\0':{return 10;break;}
}
}

//DEL CString Dlglog::quc(Stack x1, Stack y1)
//DEL {
//DEL 
//DEL }


CString Dlglog::quc()
{ 
	CString fan="";
	//CString shuzu[20];
      switch(k1)
	  {case 1:
	          {
			     (shuzu[xu1]).Format("%f",a.Gettop());
		         xu1=xu1+1;
	          }break;
	  case 2:
		  {
			  xu1=xu1-1;
		  }break;
	  }
	  if(xu1==0)
	  {
		  fan="NULL";
	  }
	  else
	  {
        for(int a=0;a<xu1;a++)
		{
			fan=fan+shuzu[a]+"        ";
		}//float hd=a.Gettop();
	  }
        return fan+CString('\r');
}
CString Dlglog::quc1()
{CString fan1,bb="\t";
//	char shuzu1[20];
      switch(k2)
	  {case 1:
	         {
		          shuzu1[xu2]=b.Gettop();xu2=xu2+1;
			 }break;
	  case 2:
		  {
			  xu2=xu2-1;
		  }break;
	  }
	  if(xu2==0)
	  {
		  fan1="NULL";
	  }
	  else
	  {
        for(int b=0;b<xu2;b++)
		{
			fan1=fan1+CString(shuzu1[b])+"        ";
		}//float hdd=a.Gettop();
	  }
       return fan1+CString('\r');

}

//DEL char Dlglog::zhuanhua(float shuru)
//DEL {
//DEL 	int shuru1=(int)shuru;
//DEL 	float shuru2=(shuru-shuru1)*1000;
//DEL 	int shuru3=(int)shuru2/1000;
//DEL 
//DEL 	return 'j';
//DEL 
//DEL }

CString Dlglog::zhuanhua(float shuru)
{
	int shuru1=(int)shuru;
 	float shuru2=(shuru-shuru1)*1000;
	//if(shuru2==0.0){CString shuchu=
 	int shuru3=(int)shuru2/1000;
	char shuru5=(char)shuru1;
	char shuru6=(char)shuru3;
CString	 shuchu=CString(shuru5)+"."+CString(shuru6);
int a=9;
	char b=char(a);
 	return shuchu;
    
}

int Dlglog::jiance()
{
	
	
	int pand=0,pand1=0,p1=0,p2=0,p3=0,jj=0,zh=0,p0=0;
	for(int zf=0;zf<bds.GetLength();zf++)
	{
		if(di1(bds.GetAt(zf))!=1&&di2(bds.GetAt(zf))!=1)
       
		{
			zh=1;break;
	
		}
	}
		
		
if((bds.GetLength()==1)&&(di1(bds.GetAt(0))==0))return 0;
else
{
	if((bds.GetLength()==1)&&(di1(bds.GetAt(0))==1))return 1;
  else
	  
		do
    {
	 char tou=bds.GetAt(0);
	 char wei=bds.GetAt(bds.GetLength()-1);
	 char qi=bds.GetAt(jj);
	 char ho=bds.GetAt(jj+1);
	if((di2(qi)==1)&&(di2(ho)==1))
	 {
		if(((qi==')')&&(ho!='('))||((ho=='(')&&(qi!=')'))||(jj<bds.GetLength()&&qi=='('&&ho=='-'))
			pand=1;
	    else 
			pand=0;
	 }
	 else
	 {pand=1;}
	 if(((di1(tou)==0)&&tou!='(')||((di1(wei)==0)&&wei!=')'))
	 {
		 if((tou=='-')&&(di1(bds.GetAt(1))==1))
		 pand1=1;
	 else pand1=0;////////////////////////////////
	 }
	 else pand1=1;



	 for(int gh=0;gh<bds.GetLength();gh++)
	 {
		 if(bds.GetAt(gh)=='(')p2=p2+1;
         if(bds.GetAt(gh)==')')p3=p3+1;
	 }
     for(int zuh=0;zuh<bds.GetLength()-1;zuh++)
	 {
		 if(((di1(bds.GetAt(zuh))==1)&&(bds.GetAt(zuh+1)=='('))||((di1(bds.GetAt(zuh+1))==1)&&(bds.GetAt(zuh)==')')))
          p0=1;
     }
	 if(pand==0||pand1==0||p2!=p3||p0==1)
	 {
		 return 0;p1=1;
	 }
	     jj++;
    }

while((jj<bds.GetLength()-1)&&p1==0);
if(p1==0&&zh==0)
{
	return 1;
}
else
{
	return 0;
}
}
}

int Dlglog::di1(char d1)
{
	int dd=0;
	switch(d1)
{
        case '0':dd=1;break;
	    case '1':dd=1;break;
		case '2':dd=1;break;
		case '3':dd=1;break;
		case '4':dd=1;break;
		case '5':dd=1;break;
		case '6':dd=1;break;
		case '7':dd=1;break;
		case '8':dd=1;break;
		case '9':dd=1;break;
}
	if(dd==0)
    return 0;
	else
	return 1;
}



int Dlglog::di2(char d2)
{int cc=0;
	switch(d2)
{
        case '+':cc=1;break;
	    case '-':cc=1;break;
		case '*':cc=1;break;
		case '/':cc=1;break;
		case '(':cc=1;break;
		case ')':cc=1;break;
}
if(cc==0)
{
	return 0;
}
else 
return 1;
}

void Dlglog::OnButton2() 
{
	// TODO: Add your control notification handler code here
    CFileDialog dlg(TRUE);
	if(dlg.DoModal()==IDOK);
	{ 
		str=dlg.GetPathName();
	}
	UpdateData(TRUE);
	m_j=str;
	UpdateData(FALSE);
}

void Dlglog::du()
{if(str=="")
	return;
    int i,j;
    ofstream fout;
    fout.open(str,ios::out,0);
    for(i=0;i<quan.GetLength();i++)
	{
				fout<<quan.GetAt(i); 	
	}
 //fout.close();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -