文档章节

查找符号的优先级

Nibnat
 Nibnat
发布于 2013/12/30 19:04
字数 404
阅读 13
收藏 0
点赞 0
评论 0
#include<stdio.h>
#include<string.h>

/*
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;	
}


© 著作权归作者所有

共有 人打赏支持
Nibnat
粉丝 0
博文 27
码字总数 10770
作品 0
湘潭
正则学习笔记

一,正则表达式分三部分 分隔符;表达式:修饰符: 二,普通字符 普通字符包括没有显式指定为元字符的所有可打印和不可打印字符。这包括所有大写和小写字母、所有数字、所有标点符号和一些其...

君满楼001
2017/11/16
0
0
windows下cmd命令提示符下让程序后台运行命令

如果你的程序需要在windows后台运行,并且是在cmd下启动,那么在执行的程序前加上start /b,比如start /b [程序名]。 windows下start命令的详细参数及功能介绍如下: 文章来源 www.169it.com ...

小星星程序员
2014/12/23
0
0
UML类图符号理论

前言 相信大家在学习UML类图的时候,最大的困难可能来自两个方面: 类图中各种关系的区别; 多种关系的符号记忆容易混淆; 本着"Do one thing and do it well."的原则,本文不介绍UML类图中各...

算法与编程之美
2016/02/18
276
3
二叉树-你可能需要知道这些

一直以来,我都很少使用也避免使用到树和图,总觉得它们神秘而又复杂,但是树在一些运算和查找中也不可避免的要使用到,那么今天我们就鼓起勇气来学习下树,争取在被问到和使用时不再那么怂。...

24K男
2017/10/10
0
0
数据结构与算法之中缀表达式转换为后缀表达式

一、中缀表达式转换为后缀表达式 1.中缀表达式和后缀表达式 中缀表达式是符合人类正常逻辑思维的; 后缀表达式则是比较契合计算机的运算。 2.中缀表达式转换为后缀表达式 思考:我们要如何将...

aibinxiao
06/28
0
0
正则表达式简单语法总结

正则表达式简单语法总结 一、什么是正则表达式:从概念上来说,正则表达式也是一门小巧而精炼的语言,它可以用来简化检索特定的字符串,替换特定字符等功能,有许多开发语言工具,都内嵌支持...

linweida
2016/09/28
23
0
shell中的eval学习与应用

一、bash命令处理的12个步骤; 1、将命令行分成由固定元字符集分隔的记号; 记号类型包括单词,关键字,I/O重定向符和分号。 2、检测每个命令的第一个记号,查看是否为不带引号或反斜线的关键...

Zero零_度
2015/04/08
0
0
数据结构和算法的选择

http://www.cnblogs.com/people/p/3291343.html 数据结构和算法的选择   本部分总结前面介绍的数据结构和算法,并讨论在不同的情况下如何进行选择。 通用数据结构:数组、链表、树、哈希表...

污湖洞主
2017/06/12
0
0
CSS选择器、优先级与匹配原理

1 选择器种类 严格来讲,选择器的种类可以分为三种:标签名选择器、类选择器和ID选择器。而所谓的后代选择器和群组选择器只不过是对前三种选择器的扩展应用。而 在标签内写入style=""的方式,...

上赶的大老鼠
2013/12/03
0
0
转------详解CSS选择器、优先级与匹配原理

作为一个Web开发者,掌握必要的前台技术也是很重要的,特别是在遇到一些实际问题的时候。这里给大家列举一个例子: 给一个p标签增加一个类(class),可是执行后该class中的有些属性并没有起...

aiaiaiya
2015/08/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

代码生成利器:IDEA 强大的 Live Templates

代码生成利器:IDEA 强大的 Live Templates

qwfys
19分钟前
1
0
spring boot使用通用mapper(tk.mapper) ,id自增和回显等问题

最近项目使用到tk.mapper设置id自增,数据库是mysql。在使用通用mapper主键生成过程中有一些问题,在总结一下。 1、UUID生成方式-字符串主键 在主键上增加注解 @Id @GeneratedValue...

北岩
22分钟前
1
0
告警系统邮件引擎、运行告警系统

告警系统邮件引擎 cd mail vim mail.py #!/usr/bin/env python#-*- coding: UTF-8 -*-import os,sysreload(sys)sys.setdefaultencoding('utf8')import getoptimport smtplibfr......

Zhouliang6
25分钟前
0
0
日常运维--rsync同步工具

rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而...

chencheng-linux
29分钟前
1
0
Java工具类—随机数

Java中常用的生成随机数有Math.random()方法及java.util.Random类.但他们生成的随机数都是伪随机的. Math.radom()方法 在jdk1.8的Math类中可以看到,Math.random()方法实际上就是调用Random类...

PrivateO2
42分钟前
1
0
关于java内存模型、并发编程的好文

Java并发编程:volatile关键字解析    volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在...

DannyCoder
昨天
0
0
dubbo @Reference retries 重试次数 一个坑

在代码一中设置 成retries=0,也就是调用超时不用重试,结果DEBUG的时候总是重试,不是0吗,0就不用重试啊。为什么还是调用了多次呢? 结果在网上看到 这篇文章才明白 https://www.cnblogs....

奋斗的小牛
昨天
1
0
数据结构与算法3

要抓紧喽~~~~~~~放羊的孩纸回来喽 LowArray类和LowArrayApp类 程序将一个普通的Java数组封装在LowArray类中。类中的数组隐藏了起来,它是私有的,所以只有类自己的方法才能访问他。 LowArray...

沉迷于编程的小菜菜
昨天
0
0
spring boot应用测试框架介绍

一、spring boot应用测试存在的问题 官方提供的测试框架spring-boot-test-starter,虽然提供了很多功能(junit、spring test、assertj、hamcrest、mockito、jsonassert、jsonpath),但是在数...

yangjianzhou
昨天
1
0
rsync工具介绍/rsync通过ssh同步

rsync工具介绍 数据备份是必不可少,在Linux系统下数据备份的工具很多,其中重点介绍就是rsync工具,rsync不仅可以远程同步数据,还可以本地同步数据,且不会覆盖以前的数据在已经存在的数据...

Hi_Yolks
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部