给定一个如下格式的字符串(1,(2,3),(4,(5,6),7))括号内的元素可以是数字,也可以是另一个括号,请实现一个算法消除嵌套的括号,比如把上面的表达式变成:(1,2,3,4,5,6,7),如果表达式有误请报错。
百度笔试题 网上答案很少 自己写了一个 供大家参考 不对的地方 请赐教
百度笔试题 网上答案很少 自己写了一个 供大家参考 不对的地方 请赐教
点击(此处)折叠或打开
- stack<char> opr; //括号栈\"(\"
- stack<char> ch; //数字栈1-9
- stack<char> result; //结果栈
-
- void format_turn(const char *str)
- {
- if(str==NULL||*str==\'\\0\')
- {
- return;
- }
- while(*str!=\'\\0\')
- {
- if(*str>=\'0\'&&*str<=\'9\')
- {
- ch.push(*str); //数字入栈
- }
- else if(*str==\'(\')
- {
- opr.push(*str); //左符号入栈
- }
- else if(*str==\')\') //右符号匹配
- {
- if(!opr.empty()) //不为空,消去左符号
- {
- opr.pop();
- }
- else //为空,失败
- {
- cout<<\"error\"<<endl;
- return;
- }
- }
- ++str;
- }
- if(!opr.empty()) //括号栈还有\"(\",失败
- {
- cout<<\"error\"<<endl;
- return;
- }
- else
- {
- while(!ch.empty()) //成功,入结果栈
- {
- char temp=ch.top();
- result.push(temp);
- ch.pop();
- }
- }
- cout<<\"(\"; //正确,输出结果
- while(!result.empty())
- {
- char temp = result.top();
- cout<<temp;
- result.pop();
- if(result.size()!=0)
- {
- cout<<\",\";
- }
- else
- {
-
- }
- }
- cout<<\")\"<<endl;
- }
-
- int main(void)
- {
- char *str=\"(1,(2,3),(4,(5,6),7))\";
- format_turn(str);
- return 0;
- }
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29012686/viewspace-1127030/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29012686/viewspace-1127030/