我这里有一个非常简单的问题,只是不确定用什么来解决它。
我正在尝试用 C++ 编写一个程序,该程序使用显式堆栈来检查字符数组的内容是否包含平衡的括号。
我还没有实现堆栈。我的问题是如何遍历字符数组并将每个索引位置的内容与字 rune 字进行比较。
基本上这个问题的逻辑是一次一个遍历char数组,每次得到一个左括号,就把那个char压入栈中,每次得到一个右括号,就比较它到堆栈顶部的 char,如果它们相同,则弹出堆栈并继续遍历 char 数组。如果您得到一个右括号,并且堆栈为空,或者顶部的字符与右括号不匹配(即花括号而不是方括号),则字符数组不平衡。
所以我有一个 for 循环来遍历 char 数组,我需要做的第一件事是写一个 if 语句,它基本上说:如果数组中位置 'i' 的元素是 "("或者如果它是“{”或者如果它是“[”,将它压入堆栈。
但我不知道如何将某个索引位置的内容与字 rune 字进行比较。
这是我尝试做的:
#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 语句与字符串文字进行比较。字符串文字都用双引号引起来,如下所示:"{"
、"("
和 "["
。字 rune 字都用单引号引起来像这样的引号:'{'
、'('
和 '['
。
试试这个代码示例。它不是将文字字符串与 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
关于c++ - 将特定索引处的 char 数组的内容与 char 文字进行比较 - cpp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45290724/