标签:算法题
/*
给定一个如下输入格式的字符串,(1,(2,3),(4,(5,6),7))
括号内的元素可以是数字,也可以另一个括号,请实现一个算法消除嵌套
的括号。比如把上面的表达式变成:(1,2,3,4,5,6,7),
如果表达式有误请报错。
*/
#include <iostream>
using namespace std;
int Grial(char *&dist,const char *str)
{
//判断表达式是否合理,此处我就不用栈了,
//栈还挺浪费空间的,直接上一个标识flags=0,
//遇到‘(‘,flags++,遇到‘)‘,flags--,if(flags==0)
//则这个表达式正确,否则-1返回 。
int flags = 0;
dist = new char[strlen(str)+1];
char *q = dist;
const char *p = str;
while (*p!=‘\0‘)
{
if (*p == ‘(‘)
flags++;
if (*p == ‘)‘)
flags--;
p++;
}
if (flags != 0)return -1;
p = str;
while (*p != ‘\0‘)
{
if (*p == ‘(‘ || *p == ‘)‘)
{
p++;
continue;
}
else
{
*q++ = *p++;
}
}
*q = ‘\0‘;
return 0;
}
int main()
{
char src[] = "(1,2,(3,4,5),6,(8,(9,10),11))";
char *dist = NULL;
cout<<Grial(dist,src)<<endl;
cout << dist;
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:算法题
原文地址:http://blog.csdn.net/liuhuiyan_2014/article/details/47186647