博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
查找符号的优先级
阅读量:6316 次
发布时间:2019-06-22

本文共 3013 字,大约阅读时间需要 10 分钟。

  hot3.png

#include
#include
/*another solution: just become array operator by their position and order,when you type two characters ,just find out their i and j,and get i*10 + j,and then compare this value,the bigger one get higher priority*/int AvoidSpe(char *ch);char *operator[16][10] = { {"(",")","[","]","->","."},  {"!","~","++","--","+","-","*","&","(type)","sizeof"},  {"*","/","%%"},  {"+","-"},  {">>","<<"},  {"<","<=",">",">="},  {"==","!="},  {"&"},  {"^"},  {"|"},  {"&&"},  {"||"},  {"?:"},  {"=","+=","-=","*=","/=","%=","&="},  {"^=","|=","<<=",">>="},  {","} };int order[17] = {0,                          //for start from 1,not 0  1,0,1,1,1,1,1,1,  1,1,1,1,0,0,1,1};           //1 is left to right,0 is right to left int FindLevel(char * ch){ int tmp; if( strlen( ch ) == 1 ) { if( *ch == '+' || *ch == '-' ||  *ch == '*' || *ch == '&' ) { tmp = AvoidSpe( ch ); return tmp; } } for( int i = 0 ; i < 16 ; i++ ) { for( int j = 0 ; j < 10 ; j++ ) { if( !operator[i][j] ) { continue; } // for get both i and j if( !strcmp( ch,operator[i][j]) ) { return ( i + 1 )*10 + j; } } }}int AvoidSpe(char *ch){ int tmp = 0; char *p; printf("%s is Unary operators or operator?(1 or 0)",ch); scanf("%d",&tmp); //*p = *ch; if( tmp == 1 ) { switch( *ch ) { case '+': return 2*10+4; break; case '-': return 2*10+5; break; case '*': return 2*10+6; break; case '&': return 2*10+7; break; } } else { switch( *ch ) { case '+': return 4*10+0; break; case '-': return 4*10+1; break; case '*': return 3*10+0; break; case '&': return 8*10+0; break; } }}int check(char *s1,char *s2){ int a = 0; int b = 0; for( int i = 0 ; i < 16 ; i++ ) { for( int j = 0 ; j < 10 ; j++ ) { if( !operator[i][j] ) { continue; } if( !strcmp( s1,operator[i][j]) && !a) { ++a; } if( !strcmp( s1,operator[i][j]) && !b) { ++b; } if( a && b ) return 1; } } printf("wrong input!\n"); return 0;}int main(){ int posi_one = 0,posi_two = 0; int posj_one = 0,posj_two = 0; int tmp = 0; char ch_i[3],ch_j[3]; printf("input first para:"); scanf("%s",ch_i); printf("input second para:"); scanf("%s",ch_j); if( !check(ch_i,ch_j) ) return 1; tmp = FindLevel( ch_i ); printf("%d\n",tmp); posi_two = tmp % 10; tmp -= posi_two; tmp /= 10; posi_one = tmp; tmp = FindLevel( ch_j ); printf("%d\n",tmp); posj_two = tmp % 10; tmp -= posj_two; tmp /= 10; posj_one = tmp; //printf("%d %d\n",posi_one,posj_one); //printf("%d %d\n",posi_two,posj_two); if( posi_one > posj_one ) { printf("%s > %s\n",ch_j,ch_i); } else if( posi_one < posj_one ) { printf("%s > %s\n",ch_i,ch_j); } else { if( order[ posi_one ] )        //from left to right { printf("from left to right\n"); } else { printf("from right to left\n"); } } return 0; }

转载于:https://my.oschina.net/nibnat/blog/188958

你可能感兴趣的文章
oracle 学习笔记之名词解释
查看>>
MySQL Cluster搭建与测试
查看>>
python数据分析画图体验
查看>>
军规15 确保集成和调用第三方APP
查看>>
Etcd和ZooKeeper,究竟谁在watch的功能表现更好?
查看>>
Shredding Company 碎纸机,dfs()枚举每一种情况,再加剪枝。
查看>>
命名空间和模块化编程 - C++快速入门39
查看>>
结构化程序设计03 - 零基础入门学习Delphi12
查看>>
今天才知道怎么插入代码!!!!!!!!!
查看>>
D2007在64位Win7出现 delphi 2007 assertion failure thread32.cpp 的解决办法
查看>>
STM32的TAMPER-RTC管脚作为Tamper的使用[转]
查看>>
[记]一个逐步“优化”的范例程序
查看>>
2012-01-09_2
查看>>
数学 - 线性代数导论 - #5 矩阵变换之置换与转置
查看>>
java数据结构:队列
查看>>
使用.NET进行高效率互联网敏捷开发的思考和探索【一、概述】
查看>>
切换默认Activity和Fragment的动画
查看>>
SSM练习——登录实现
查看>>
asp.net core 2.0 Microsoft.Extensions.Logging 文本文件日志扩展
查看>>
余光中_百度百科
查看>>