gpt4 book ai didi

c++ - 检查 C++ 括号的堆栈实现

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:24:37 26 4
gpt4 key购买 nike

我正在尝试实现一个堆栈来检查文件是否具有平衡 ()、[] 和 {}。该程序应该接收一个文件并检查它是否平衡并返回一个 bool 值。当我运行该程序时,它仅适用于文件中的最后一个括号。我如何更改代码以使其适用于最后一对之前的括号。输入文件只是一个简单的 c 文件。

附带问题:

如果我想让这个程序与 html 文件一起工作,我只需要用 html 标签更改 ()、[]、{} 吗?

这是我的代码

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <stack>
#include <string>

using namespace std;

bool balanced(string A[], int n)
{
int i;
stack <string> a;

for (i = 0; i < n; i++) {
if (A[i] == "(" || A[i] == "{" || A[i] == "["){
a.push(A[i]);
} else
if (A[i] == ")" || A[i] == "}" || A[i] == "]") {
if (a.empty()) {
return false;
} else {
a.pop();
return true;
}
}
}
}

int main()
{
ifstream infile;
infile.open ("Text.txt");
string A[1000];

int i = 0;
int n = (sizeof(A) / sizeof(*A));

while (!infile.eof()) {
getline(infile, A[i], '\n');
i++;
}

bool out;
out = balanced(A, n);

if (out == true) {
cout << "legal";
} else {
cout << "illegal";
}

return 0;
}

最佳答案

即使您按照@bipll 的建议修复错误,您的解决方案也仅适用于一种括号。 This是将解决您的问题的解决方案的完整说明。这是 C++ 代码:

#include<bits/stdc++.h>
using namespace std;

// function to check if paranthesis are balanced
bool areParanthesisBalanced(char expr[])
{
stack<char> s;
char a, b, c;

// Traversing the Expression
for (int i=0; i<strlen(expr); i++)
{
if (expr[i]=='('||expr[i]=='['||expr[i]=='{')
{
// Push the element in the stack
s.push(expr[i]);
}
else
{
switch (expr[i])
{
case ')':

// Store the top element in a
a = s.top();
s.pop();
if (a=='{'||a=='[')
cout<<"Not Balancedn";
break;
case '}':

// Store the top element in b
b = s.top();
s.pop();
if (b=='('||b=='[')
cout<<"Not Balancedn";
break;
case ']':

// Store the top element in c
c=s.top();
s.pop();
if (c=='('||c=='{')
cout<<"Not Balancedn";
break;
}
}
}

// Check Empty Stack
if (s.empty())
return true;
else
return false;
}

// Driver program to test above function
int main()
{
char expr[]="{()}[]";

if(areParanthesisBalanced(expr))
cout<<"Balanced";
else
cout<<"Not Balanced";
return 0;
}

关于c++ - 检查 C++ 括号的堆栈实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49641410/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com