首页 > 试题广场 >

给定一个字符串,设计一个算法消除其中承兑的括号

[问答题]
给定一个字符串,设计一个算法消除其中承兑的括号,如果括号不成对,提示异常(error)
如(1,(2,3),(4,(5,6),7))转化为1,2,3,4,5,6,7
如(1,)2,3),(4,(5,6(,7))提示error。
#include <iostream>
#include <string>
#include <stack>
#include <vector>
using namespace std;


int main(void)
{
string s;
while(getline(cin,s))
{
stack<char> khStack;
vector<char> fkhVector;
bool flag = true;
for(int i=0;i<s.length();i++)
{
if(s[i] == '(')
khStack.push(s[i]);
else if(s[i] == ')')
{
//读到一个')',则从括号栈中弹出,进行匹配
if(!khStack.empty())
{
khStack.pop();
}
else
{
flag = false;
break;
}
}
else
fkhVector.push_back(s[i]);
}

if(flag == false || !khStack.empty())
cout<<"error"<<endl;
else
{
for(int i=0;i<fkhVector.size();i++)
cout<<fkhVector[i];
}
}
return 0;
}
发表于 2015-09-14 17:16:23 回复(1)
思路有很多种,定义一个变量temp,初始化为0,从左到右扫一遍,遇到数字存到一个char数组中,遇到"(",temp++,遇到")"temp--,当temp小于0时,直接弹出,输出error。最后判断如果temp==0,输出序列数字。当temp大于0,输出也error。
发表于 2015-09-14 21:33:11 回复(0)
class RemoveBrackets:
    """docstring for RemoveBrackets"""
    def removeBrackets(self, mystr):
        mystr1 = []
        for m in xrange(len(mystr)):
             mystr1.append(mystr[m])
             mystr2 = []
        for i in xrange(len(mystr1)):
             mystr2.append(mystr1[i])
             a = mystr2.count('(')
             b = mystr2.count(')')
             if a < b:
                  print 'error'
                  break
       else:
            c = mystr1.count('(')
            d = mystr1.count(')')
            if c != d:
                 print 'error'
           else:
                 for j in xrange(c):
                        mystr1.remove('(')
                        mystr1.remove(')')
                str1 = ''
                str1 = str1.join(mystr1)
                return str1

测试用例:x = RemoveBrackets()
                 x.removeBrackets('(1,((34,5))')
('(1,((34,5))')  error
'(1,3,(4,5))'  1,3,4,5
 '(1,3,)4,5)   error
编辑于 2015-09-15 09:25:42 回复(0)
#include <iostream>
#include <string>
#include <stack>
using namespace std;

bool isValid(string &s) {
	if (s.size() == 0)
	{
		return false;
	}
	string res;
	stack<char>st;
	int i;
	for(i=0;i<s.size();i++){
		if(s[i]=='(' || s[i]=='{' || s[i]=='['){
				st.push(s[i]);
		}
		else if(s[i]==')')
		{
			if(st.empty()){
				return false;
			}
			if('(' == st.top()){
				st.pop();
			}else{
				return false;
			}
		}
		else if(s[i]=='}'){
			if(st.empty()){
				return false;
			}
			if('{' == st.top()){
				st.pop();
			}else{
				return false;
			}
		}
		else if(s[i]==']'){
			if(st.empty()){
				return false;
			}
			if('[' == st.top()){
				st.pop();
			}else{
				return false;
			}
		}
		else{
			res.push_back(s[i]);
		}
	}
	if (st.empty())
	{
		s = res;
		return true;
	}
	else
	{
		return false;
	}
}

void main(){

	string s = "(1,(2,3),(4,(5,6),7))";
	if (isValid(s))
	{
		cout<<s<<endl;
	}
	else
	{
		cout<<"error";
	}
}

发表于 2020-09-06 16:37:53 回复(0)
反写的括号也应该判断为错,即)()(这种形式。 判断一下第一括号遇到的不是右括号
发表于 2016-10-24 20:41:52 回复(0)

function test(str){
  var num = 0;
  var res = "";
  for(var i = 0; i < str.length; i++){
    if(str.charAt(i) == "("){
      num++;
    }
    else if(str.charAt(i) == ")"){
      num--;
    }
  }

  if(num != 0){
    return "Error";
  }

  for(var j = 0; j < str.length; j++){
    if(!isNaN(str.charAt(j))){
      res+=str.charAt(j)+",";
    }
  }

  return res.substr(0, res.length-1);

发表于 2015-09-15 10:29:09 回复(0)
char* deleteBracket(char* str, int size)
{
	if (str == NULL)
	{
		return NULL;
	}

	stack<char> sk;
	char* ret = new char[size];
	char* pret = ret;
	char* pstr = str;
	while(*pstr != '\0')
	{
		if (*pstr == '(')
		{
			sk.push(*pstr);
		}
		else if (*pstr == ')')
		{
			if (sk.empty())
			{
				return "error";
			}

			sk.pop();
			
		}
		else if (*pstr == ',' || (*pstr <= '9' && *pstr >= '0'))
		{
			*pret++ = *pstr;
		}

		pstr++;
	}
	*pret = '\0';

	if (sk.empty())
	{
		return ret;
	}
	else
	{
		return "error";
	}
}

发表于 2015-09-14 16:47:03 回复(0)
//str是源字符串,res是结果字符串
//返回-1表示括号不成对
int bracket(const char* pstr,char* pres)
{
    if(pstr==NULL)
    {
        return -1;
    }
    int bracket_num = 0;
    while(*pstr)
    {
        if(*pstr=='(')
        {
            bracket_num++;
            pstr++;
        }
        else if(*pstr==')')
        {
            bracket_num--;
            pstr++;
        }
        else
        {
            (*pres++) = *(pstr++);
        }
    }
    *pres = '\0';
    if(bracket_num != 0)
    {
        return -1;
    }
    return 0;
}
发表于 2015-09-14 10:41:28 回复(4)