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细胞;
返回厦门;
)
)
/ *
一种简单的表达评价使用缀以后缀符号
评价的一种表现。
仍然有缺陷,需要加以修正!
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细胞;
返回厦门;
)
)