第一次:
一.表达式处理
题目要求表达式合法,而不合法的表达式显然是不能进行后续操作的,因此第一步要做的就是把不合法的表达式排除在外。
我的想法是这样的:
1. 把所有包含正确表达式不该有的字符的输入屏蔽掉
2. 把所有包含非法数字的表达式屏蔽掉
3. 把所有含有类似“+++”、“+-+”、“^++”等的表达式屏蔽掉,为下一步的拆分做铺垫
4. 当表达式差分成一个个项的时候,只要有一个项出现异常,整个串即为不合法
其中可能会出现一些细节问题,例如:
1. 判断非法字符的方法:我采用了最土的方法,把合法字符全部删除,如果还存在字符则显然非法。
2. 不合法数字的正则表达式:"(.*)[-\\+\\^][-\\+]( )+(\\d)(.*)"和"(.*)(\\d)( )+(\\d)(.*)"。
3. 处理分隔符时的方法:因为我采取的分割口是“+”,所以每两个项之间必须有一个加号,还要保证x^\\d中不能出现加号,因此要将将x^\\d中可能出现的加号删除,将++换成+,--换成+,-+和-换成+-,这样就可以保证所有拆分出来的项都是合法的。当然如果表达式开头出现加号则在开头加上“0”,结尾出现加号则屏蔽掉。
二.项的处理
将切分好的项进行标准化,化成"(.*)*x^(.*)"的形式,以便使用*x^进行切割,将两边的