本文主要是介绍消除字符串中成对的括号,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
给定一个字符串,设计一个算法消除其中成对出现的括号,如果括号不成对,提示异常(error),例如:(1,(2,3),(4,(5,6),7))转化为1,2,3,4,5,6,7;
例如(1,(2,3),(4,(5,6),7),提示error。
思路:遍历原始数组,如果是左括号(“(”),设置括号标志位加1,如果是右括号(“)”),设置括号标志位减一,如果都不是,则把数字放入目的数组。最后通过判断括号标志位是否为0判断原始字符串中的括号是否成对出现。
// Bracket_in_String.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include<iostream>using namespace std;bool Bracket(char* psrc,char *pdst)
{if(psrc==NULL){return false;}int bracket_num=0;while(*psrc){if((*psrc)=='('){bracket_num++;psrc++;}else if((*psrc)==')'){bracket_num--;psrc++;}else{(*pdst++)=(*psrc++);}}*pdst='\0'; //在目的数组末尾加上结束标志if(bracket_num!=0){return false;}else{return true;}
}
int _tmain(int argc, _TCHAR* argv[])
{char *src="(123(23)";char *dst=new char[strlen(src)];if(Bracket(src,dst)){cout<<dst<<endl;}else{cout<<"括号不是成对出现! "<<endl;}cin.get();return 0;
}
另一种思路是借助于栈实现功能,如果是左括号(“(”),就把左括号入栈,如果是右括号(“)”),就把左括号出栈,如果都不是,则把数字放入目的数组。最后通过判断栈是否为空判断原始字符串中的括号是否成对出现。
这篇关于消除字符串中成对的括号的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!