我在这里有一个非常简单的问题,只是不确定要用什么来解决它。
我正在尝试用c ++编写一个程序,它使用显式堆栈来检查字符数组的内容是否包含平衡的括号。
我还没有实现堆栈。我的问题是如何遍历字符数组并将每个索引位置的内容与char文字进行比较。
基本上问题的逻辑是你一次遍历char数组一个pos,每次你得到一个开头paren,你把那个char推到堆栈上,每次你得到一个关闭paren,你比较它到堆栈顶部的char,如果它们是相同的,你弹出堆栈并继续遍历char数组。如果你得到一个关闭的paren,并且堆栈是空的,或者顶部的char与闭合的paren(即花括号而不是方括号)不匹配,则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遍历它,但我不确定如何比较这些。
我非常感谢任何帮助,谢谢
答案 0 :(得分:1)
您的if语句与字符串文字进行比较。字符串文字都是双引号,如:"{"
,"("
和"["
。字符文字都是单引号,如:'{'
,'('
和'['
。
试试这个代码示例。它不是将文字字符串与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