帮我找问题

A

anglin1024

Guest
码:

/ *

一种简单的表达评价使用缀以后缀符号

评价的一种表现。
仍然有缺陷,需要加以修正!

V.0.2 - “为了处理运营异常,如:

-7 *- 4和2 * ( -5 6 )

* /#包括<iostream>

#包括<sstream>

#包括<string>

#包括<stack>

#包括<vector>

#包括<math.h>

#定义皮3.14159265使用名字空间性病;

/ /函数声明

无效转换(构造函数String缀,字符串&后缀) ;

布尔IsOperand (焦总) ;

布尔TakesPrecedence (焦OperatorA ,焦炭OperatorB ) ;/ *我的职务我已经说* /

字符串Change_me (字符串) ;

字符串Insert_comma (字符串) ;

布尔Check_valid (字符串) ;

双重评价(字符串[ ] ) ;

无效下一步(字符串) ;诠释的Main ( )

(焦答复;做



串缀,后缀; / /本地本环路法院“ ” “ \ ñ输入您的表达没有空格! \ n \ n已” ;

法院“ ” “例如: ( 4 2 ) * 3 / 2 ” “ ” endl ;

法院“ ” “未知变量,如' a '和的' X '不允许使用: \ n \ n已” “ ” ;

变“ ”缀;如果( Check_valid (插) ==真实)

(字符串气温;

气温= Change_me (插) ;

/ /法院“ ”气温;

/ / cin.get ( ) ;转换(气温,后缀) ;法院“ ” “相当于后缀表达是: ” “ ” endl

“ ” Insert_comma (后缀) ;字符串举行;

持有= Insert_comma (后缀) ;法院“ ” “ \ ñ \攀升的回答是: ” ;

下一步(举行) ;法院“ ” endl “ ” “ \ nDo另一个(是/否) ? ” ;

变“ ”答复;



其他的



法院<<"***语法错误*** \ N “的;

法院“ ” endl “ ” “做的是另一套(是/否) ? ” ;

变“ ”答复;)) ,而( tolower (引) == ' Ÿ ' ) ;返回0 ;

)/ *鉴于:总的特点。

任务:确定总的一个操作(这里理解

将一个单一的字母或数字) 。

返回:在函数名称:真正的,如果总的操作,虚假,否则。

* /

布尔IsOperand (焦总)



如果( ( (总“ = '一' ) & & (总” = ' ž ' ) ) | |

( (总“ = ' à ' ) & & (总” = ' ž ' ) ) | |

( (总“ = '0 ' ) & & (总” = '9 ' ) ) )

回到真正的;

其他的

返回FALSE ;

)/ *鉴于: OperatorA一个字符代表一个运营商或括号中。

OperatorB一个字符代表一个运营商或括号中。

任务:确定是否OperatorA高于OperatorB 。

返回:在函数名称:真正的,如果OperatorA优先

OperatorB 。

* /

布尔TakesPrecedence (焦OperatorA ,焦炭OperatorB )



如果( OperatorA == ' ( ' )

返回FALSE ;

否则,如果( OperatorB == ' ( ' )

返回FALSE ;

否则,如果( OperatorB == ' ) ' )

回到真正的;

否则,如果( ( OperatorA == ' ^ ' ) & & ( OperatorB == '^'))

返回FALSE ;

否则,如果( OperatorA == ' ^ ' )

回到真正的;

否则,如果( OperatorB == ' ^ ' )

返回FALSE ;

否则,如果( ( OperatorA == ' * ' ) | | ( OperatorA == '/'))

回到真正的;

否则,如果( ( OperatorB == ' * ' ) | | ( OperatorB == '/'))

返回FALSE ;

其他的

回到真正的;)/ *鉴于:缀的字符串相当于缀表达(不含空格) 。

任务:找到后缀相当于这一表达。

返回:字尾字符串举行这次后缀同等学历。

* /

无效转换(构造函数String缀,字符串和后缀)



堆栈<char> OperatorStack ;

焦TopSymbol ,符号;

国际钾;为(金= 0 ; k “ Infix.size ( ) ;的K )



符号=缀[ k ] ;

如果( IsOperand (符号) )

后缀=后缀 符号;

其他的



而( ( ! OperatorStack.empty ( ) ) & &

( TakesPrecedence ( OperatorStack.top ( ) ,文号) ) )



TopSymbol = OperatorStack.top ( ) ;

OperatorStack.pop ( ) ;

后缀=后缀 TopSymbol ;



如果( ( ! OperatorStack.empty ( ) ) & & (符号== ')'))

OperatorStack.pop ( ) ; / /丢弃匹配(

其他的

OperatorStack.push (符号) ;



)而( ! OperatorStack.empty ( ) )



TopSymbol = OperatorStack.top ( ) ;

OperatorStack.pop ( ) ;

后缀=后缀 TopSymbol ;





/*---------------------------------------------

我国功能需要tokenise表达--------------------------------------------*/字符串Change_me (字符串my_string )

(为(国际为I = 0 ,我“ my_string.length ( ) ;一 )



如果( isdigit ( my_string ) ! = 0 )



如果( isdigit ( my_string第[ i 1 ] ) == 0 )



my_string.insert (一一, “ V ”形) ;

/ / v是只是一个任意选择

/ /它可以是任何其他信

/ /但它必须是字母)





/ /更改-7 *- 7例

为(国际为I = 0 ,我“ my_string.length ( ) ;一 )



如果( my_string =='-')



如果( ( my_string [我- 1 ] ! =的V ')&&( my_string [我- 1 ]!=')'))



my_string.replace (一, 1 , “ Y ”型) ;





)返回my_string ;

)/*-----------------------------------------

我国功能需要tokenise表达

-----------------------------------------*/

字符串Insert_comma (字符串my_string )



为(国际为I = 0 ,我“ my_string.length ( ) ;一 )



如果( ( my_string =='*')||

( my_string =='-')||

( my_string =='/')||

( my_string ==' ')||

( my_string =='^')||

( my_string == ' C '类) )



my_string.insert ( 1 1 , ",");

/ /插入一个逗号毕竟

/ /发现运营商



否则,如果( my_string == V字)



my_string.replace (一, 1 ,",");

/ /取代V提供了一个逗号

/ /澄清





/ /更改

为(国际为I = 0 ,我“ my_string.length ( ) ;一 )



如果( my_string == ' Y键)



my_string.replace (一, 1 ,"-");





返回my_string ;

)/*-----------------------------------------

我的功能检查,没有任何变数

输入

-----------------------------------------*/

布尔Check_valid (字符串my_string )



/ /更改检查连续' ' , ' - '

/ /不存在的迹象

为(国际为I = 0 ,我“ my_string.length ( ) ;一 )



如果( ( my_string ==' ')||( my_string =='-'))



如果( ( my_string第[ i 1 ]==' ')||( my_string第[ i 1 ]=='-'))



返回FALSE ;





)字符串数组= “ 0123456789 -*/()^ C ”类;国际计数= 0 ;

为(国际为I = 0 ,我“ my_string.length ( ) ;一 )



为(杂志= 0 ; j “ array.length ( ) ; J 的)



如果( my_string ==数组[ 1 ] )



伯爵 ;





)如果(伯爵== my_string.length ( ) )



回到真正的;



其他的



返回FALSE ;

))/*-----------------------------------

我国功能实际上评价

后缀表达式

----------------------------------*/无效下一步(字符串my_string )



载体<string>阵列;

字符串tempy ;国际comma_count = 0 ;

为(摘要1 = 0 ;一“ my_string.length ( ) ; 1 )



如果( my_string [ 1 ]==',')



comma_count ;



)/ /评价令牌使用“ , ”作为分隔符

而( my_string.find (",", 0 ) ! =字符串: :非营利组织)



/ /解除常见问题

/ /是否字符串有逗号吗?

size_t名次= my_string.find (",", 0 ) ;

tempy = my_string.substr ( 0 ,名次) ;

my_string.erase ( 0 ,名次 1 ) ;

array.push_back ( tempy ) ; / /存储在载体

)/ / array.push_back ( my_string ) ; / /最后的令牌独自堆栈<string> my_stack ; / /初始化堆栈

字符串气温[ 100 ] ;

字符串总;为(国际为I = 0 ,我“ comma_count我 )

(字符串秒;

秒=阵列; / /便于阅读如果( (县!=" ")&&

(县!="*")&&

(县!="-")&&

(县!="/")&&

(县!="^")&&

(县! =的“ C ” ) )



my_stack.push (县) ;

/ /把数字到栈



其他/ /即如果遇到经营者



my_stack.push (县) ; / /推动运营商到栈

气温[ 0 ] = my_stack.top ();//存储值

my_stack.pop ( ) ; / /擦除从堆栈气温[ 1 ] = my_stack.top ();//存储值

my_stack.pop ();//擦除从堆栈气温[ 2 ] = my_stack.top ();//存储值

my_stack.pop ();//擦除从堆栈双ž ;

ž =评价(临时) ;

ostringstream出局; / /声明一个输出字符串流。

出局“ ” ž ; / /转换成一个字符串值。

总= outs.str ( ) ;my_stack.push (瑞士) ;)



法院“ ”总;

cin.get ( ) ;



/*------------------------------

我国功能做数学:

双重转换字符串

然后回到字符串

------------------------------*/

双重评价(字符串气温[ ] )



字符串甲,乙,丙;

1 =气温[ 2 ] , B期=气温[ 0 ] ; ç =气温[ 1 ] ;

双重的x , y坐标,吨;

istringstream插件,插入;

ins.str ( a )条; inse.str ( c )段;

集“ ”十大

插入“ ”肽Y ;如果(二==" ")



ž = x 肽Y ;

返回厦门;



否则,如果(二=="-")



ž = x -肽Y ;

返回厦门;



否则,如果(二=="*")



ž = x *肽Y ;

返回厦门;



否则,如果(二=="/")



ž =的X / Y ;

返回厦门;



否则,如果(二=="^")



ž =战俘(的x , y ) ;

返回厦门;



否则,如果(二==的“ C ” )



吨=产地来源证(十* PI/180 ) ;

ž = Ÿ T细胞;

返回厦门;





 

Welcome to EDABoard.com

Sponsor

Back
Top