我在这里有一个非常简单的问题,只是不确定要用什么来解决它。
我正在尝试使用c++编写一个程序,该程序使用显式堆栈检查字符数组的内容是否包含平衡的括号。
我还没有实现堆栈。我的问题是如何遍历字符数组并将每个索引位置的内容与char文字进行比较。
从本质上讲,问题的逻辑是您一次遍历char数组,每次获取一个开放的paren时,都将该char推入堆栈,每次获取一个封闭的paren时,都将其与char位于栈顶,如果它们相同,则弹出栈并继续遍历char数组。如果您获得一个封闭的括号,并且堆栈为空,或者顶部的字符与封闭的括号不匹配(即大括号而不是方括号),则char数组不平衡。
因此,我有一个for循环来遍历char数组,而我要做的第一件事是编写一个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