原题目
括号匹配判断
问题描述:
检查字符串表达式中的括号是否匹配;
左括号数目同有括号数目不相等即为不匹配;
去除多余的左括号或者右括号,优先保留先出现的括号;
匹配后去除无效的括号:如:((表达式)) 应为(表达式);
只考虑小括号,不考虑先出现右括号的情况;
要求实现函数: (字符串最长长度为60;表达式正确性不需要考虑)
void Bracket(char* src, char* dst);
如果匹配则通过dst输出原串;
如果不匹配则根据要求去处多于括号后通过dst输出匹配后的串;
示例
输入:12+(345*25-34) 输出:12+(345*25-34)
输入:12+(345*(25-34) 输出: 12+(345*25-34)
输入:(12+345)*25)-34 输出: (12+345)*25-34
输入:(543+(256-43)*203))+24
输出:(543+(256-43)*203)+24
输入:((1+2)*((34-2))+((2*8-1)
输出:((1+2)*(34-2)+2*8-1)
void Bracket(char* src, char* dst);只能在这个函数中实现,不允许用栈。不允许另写函数并加以调用。src是输入的字符串,dst是输出的字符串!
算法描述:
第一步:
扫描字符串中出现(,)的位置记录到array数组
第二步:
array数组分成两组,A组是(出现的位置, B组是)出现的位置
第三步:
遍历B组中的元素,每次遍历将B[n]在A组中比较,若B[n]>A[K] && B[n]<A[K+1],则将B[n]和A[K]从B组和A组中清除
第四步:
此时A组和B组中是多余的(和)位置,拼接数组