C++用于检查平衡 ()s、{} 和 []s 字符串的程序
C++ program for checking a string for balanced ()s, {}s and []s
这是我的问题:
我应该编写一个 c++ 程序来检查字符串是否平衡。到目前为止,我让代码工作以确保它具有相同数量的 ('s 和 )(与 ['s 和 {'s 相同)。问题是这几乎适用于所有内容,但它不适用于 {'s、('s 和 ['s 都混淆的字符串。
例如:"{ { [ ( ) ] } ( ) }" 返回时应为平衡 (true)。但是,"{ ( [ ] } )"会恢复为真,但不应该。
逻辑和/或代码中的哪些想法会在它们出现故障时进行检查?
感谢您的任何帮助!
如果有帮助,我的代码如下:
bool ExpressionManager::isBalanced(string expression)
{
//remove whitespace
string edited;
for(int i = 0; i < expression.length(); i++)
{
if(expression[i] == ' ')
{
continue;
}
else
{
edited += expression[i];
}
}
expression = edited;
//set up brckets
string brackets;
for(int i = 0; i < expression.length(); i++)
{
if (expression.at(i)=='(')
{
brackets += expression.at(i);
}
if (expression.at(i)=='[')
{
brackets += expression.at(i);
}
if (expression.at(i)=='{')
{
brackets += expression.at(i);
}
if (expression.at(i)=='}')
{
brackets += expression.at(i);
}
if (expression.at(i)==']')
{
brackets += expression.at(i);
}
if (expression.at(i)==')')
{
brackets += expression.at(i);
}
}
int parenbal = 0;
int brackbal = 0;
int mustachebal = 0;
for (int i = 0; i<(brackets.size());i++)
{
if(brackets[i]=='(')
parenbal++;
if(brackets[i]=='[')
brackbal++;
if(brackets[i]=='{')
mustachebal++;
if(brackets[i]==')')
parenbal--;
if(brackets[i]==']')
brackbal--;
if(brackets[i]=='}')
mustachebal--;
}
bool isbalanced = false;
if ((mustachebal==0)&&(brackbal==0)&&(parenbal==0))
{
isbalanced = true;
}
//check for brackets mixed up with other stuff.
return isbalanced;
}
如果您使用 Stack 来存储这些令牌,那么您总是在寻找对应于堆栈顶部的关闭对应物或开放令牌。
流程将是
- 如果令牌是开放令牌,请将其推送到堆栈上。 如果令牌是
- 关闭令牌,请检查堆栈顶部是否是相应的开放令牌。如果是,那么当您发现它们平衡时弹出堆栈。如果不是,则为错误。
似乎更像是家庭作业。因此,我会相应地发表评论,并让您学到一些东西。
- 始终初始化变量。 字符串不会在代码中初始化。
- 您不会迭代字符串三次,只能检查一次字符串。 使用 if-else
- if-else 结构而不是 if-if-if 结构。
- 始终使用括号大括号
- 与您的用法保持一致,使用 at() 或 [],但不要在代码中混合使用它们。
//this code may help you check string for balanced brackets with no
//repeated brackets,paranthesis or braces (e.g. [2*{3/(1+2)}].Note: no repeatance of
//brackets
#include <iostream.h>
#include <conio.h>
#include "IntStack.h"
#include <stdio.h>
void main(void)
{
char bracket[20];
gets (bracket);
char arr[6];
int i=0;
while(i<20)
{
switch(bracket[i])
{
case '[':
{
arr[0]=1;
break;
}
case '{':
{
arr[1]=2;
break;
}
case '(':
{
arr[2]=3;
break;
}
case ')':
{
arr[3]=3;
break;
}
case '}':
{
arr[4]=2;
break;
}
case ']':
{
arr[5]=1;
break;
}
default:
cout<<"";
}
i++;
}
if(arr[3]==arr[2])
cout<<"";
else
cout<<" ) or ( is missing "<<endl;
if(arr[1]==arr[4])
cout<<"";
else
cout<<" } or { is missing "<<endl;
if(arr[5]==arr[0])
cout<<"";
else
cout<<" ] or [ is missing"<<endl;
}
void check_brackets (string bituy)
{
int flag = 1
int count[6] = {0, 0, 0, 0, 0, 0};
stack<char> barstack;
for (int i = 0; i < bituy.length(); i++)
{
if (bituy[i] == '{')
count[0]++;
else if (bituy[i] == '}')
count[1]++;
else if (bituy[i] == '(')
count[2]++;
else if (bituy[i] == ')')
count[3]++;
else if (bituy[i] == '[')
count[4]++;
else if (bituy[i] == ']')
count[5]++;
}
for (int i = 0; i < 6; i += 2)
{
if (count[i] != count[i+1])
{
cout << "Wrong Syntax!" << endl;
flag = 0;
break;
}
}
if (flag)
{
for (int i = 0; i < bituy.length(); i++)
{
if (bituy[i] == '{' || bituy[i] == '(' || bituy[i] == '[')
barstack.push(bituy[i]);
else
{
if ((barstack.top() == '{' && bituy[i] == '}') || (barstack.top() == '(' && bituy[i] == ')') || (barstack.top() == '[' && bituy[i] == ']'))
barstack.pop();
else
{
cout << "Wrong Syntax!" << endl;
flag = 0;
break;
}
}
}
}
if (flag)
cout << "No Errors!" << endl;
}
#include<bits/stdc++.h>
using namespace std;
bool isBalance(char n[],int size){
int i,count=0;
//int size=strlen(n);
for(i=0;i<size;i++){
if(n[i]=='{'||n[i]=='['||n[i]=='('){
count ++;
}
else if(n[i]=='}'||n[i]==']'||n[i]==')'){
count --;
}
else return -1;
}
if(count==0)
return true;
else
return false;
}
int main(){
char n[1000];
gets(n);
int size=strlen(n);
bool result=isBalance(n,size);
if(result==true)
cout<<"Balance";
else
cout<<"Not Balance";
return 0;
}
//bracket Chaecker program
void bracket_checker()
{
int i=0;
char d;
char ch;
int count=0;
char *s = new char[21];
fstream out;
out.open("brace.txt",ios::in);
while(out>>d)
{
if(d =='}'|| d ==')' || d == '{' || d =='(')
{
s[i]=d;
i++;
}
}
if (i % 2 != 0)
cout <<"ninvalid braces";
else if (( s[0] == '}' || s[0]==')' || s[0]==']') || (s[i]=='{' || s[i]=='(' || s[i]=='[' ))
cout <<"n invalid braces";
else
{
for(int a=0; a<i; a++)
{
if (s[a] == '(' || s[a] == '{' || s[a] =='[' )
push1(s[a]);
if((s[a]=='(' && (s[a+1]=='{' || s[a+1]=='}')) || (s[a]=='[' && (s[a+1]=='{' || s[a+1]=='}')))
break;
else
if (s[a] == ')' || s[a] == '}' )
{
if (head != NULL)
{
ch = pop1();
if( ch == '{' && s[a] == '}' || ch == '(' && s[a] == ')' || ch=='[' && s[a]==']')
cout <<" ";
else
break;
}
else
break;
}
}
if(head==NULL)
cout <<" valid";
else
cout <<"In Valid";
}
}
相关文章:
- 重载操作程序时出错>>用于类中的字符串 memebr
- 为什么这个 c++ 代码打印出长度 5,当我打印出字符串时,程序会自动终止?
- 我的目标是编写一个程序来计算和存储字符串在字符数组中出现的位置
- 获取 OID(类型::b_oid)作为 MongoDB C++驱动程序中的字符串
- 重新运行程序和字符串流?
- 如何将字符串和整数读取到两个单独的动态数组中的程序编写?
- 如何使用将字符串拆分为 for 循环中的变量的程序
- win 表单应用程序字符串^ 到 int
- SDL2 程序只写入部分字符串
- 如何保护非托管应用程序中的字符串不受进程转储的影响
- C++程序在将 int 与 cin 一起使用时有效,但不能使用字符串
- 反转字符串程序中的分段错误
- C++简单的字符串程序
- 即使包含字符串C++程序的编译错误
- 需要帮助弄清楚为什么我的反向字符串c++程序正在崩溃
- 导致运行反向字符串程序时停止工作
- 查找禁止的字符串程序
- 字符串程序中C++错误
- 字符串程序C++运行时错误
- 回文子字符串程序无法运行