我在这里有一个非常简单的问题,只是不确定要用什么来解决它。

我正在尝试使用c++编写一个程序,该程序使用显式堆栈检查字符数组的内容是否包含平衡的括号。

我还没有实现堆栈。我的问题是如何遍历字符数组并将每个索引位置的内容与char文字进行比较。

从本质上讲,问题的逻辑是您一次遍历char数组,每次获取一个开放的paren时,都将该char推入堆栈,每次获取一个封闭的paren时,都将其与char位于栈顶,如果它们相同,则弹出栈并继续遍历char数组。如果您获得一个封闭的括号,并且堆栈为空,或者顶部的字符与封闭的括号不匹配(即大括号而不是方括号),则char数组不平衡。

因此,我有一个for循环来遍历c​​har数组,而我要做的第一件事是编写一个if语句,该语句基本上说:如果数组中'i'位置的元素是“(”或它是“{ ”;如果是“[”,则将其压入堆栈。

但是我不知道如何将某个索引位置的内容与char文字进行比较。

这是我尝试做的事情:

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<stack>
using namespace std;

int main(){
    stack<char> S;
    char* parens = "{()()}";
    int len = strlen(parens);

    for(int i = 0; i < len; i++){
        if(parens[i] == "(" || parens[i] == "{" || parens[i] == "["){
            S.push(parens[i]);
        } else { // etc

Visual Studio不喜欢if语句。它说它不能将“char”与“const char *”进行比较。

我也尝试使用strcmp(parens [i],“(/ {/ [”)== 0,它也不喜欢。我必须使用字符数组而不是字符串,因为我需要使用索引pos,但是我不确定如何比较它们。

我真的很感谢您的帮助,谢谢

最佳答案

您的if语句与字符串文字进行比较。字符串文字都用双引号括起来,如下所示:"{""(""["。 Char文字全都用单引号引起,如下所示:'{''(''['

试试这个代码示例。而不是将文字字符串与char比较,而是将文字char与char比较。我还在字符串文字声明的前面添加了const,因为某些C++编译器坚持认为此类变量应为const char *而不是char *

int main(){
    stack<char> S;
    const char* parens = "{()()}";
    const int len = strlen(parens);

    for(int i = 0; i < len; i++){
        if ( ( parens[i] == '(' ) || ( parens[i] == '{' ) || ( parens[i] == '[' ) {
            S.push(parens[i]);
        } else { // etc

09-11 19:43
查看更多