给定一个如下格式的字符串(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博客 ” ,链接:https://blog.itpub.net/29012686/viewspace-1127030/
,如需转载,请注明出处,否则将追究法律责任。