c++ - 将特定索引处的 char 数组的内容与 char 文字进行比较 - cpp

标签 c++ arrays string char

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

我正在尝试用 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/

相关文章:

c# - 将字符串数组转换为 C# 中的串联字符串

c - 如何在 C 编程中将两个字符串数组放在一起

java - 自定义类型集合的自定义字符串表示形式

c++ - 我对 c++ 纯虚函数和接口(interface)的误解

c++ - C++ 98 中的部分模板特化?

php - Laravel 5 更新记录返回 false

c# - 如何按从最少尝试到最多尝试的顺序获取一组 bool 组合?

c++ - 试图制作一个排序的动态列表(数据结构)

c++ - GDI 函数在绘图时将 Alpha channel 设置为 0。为什么?

c++ - Variadic 模板类的构造函数无法接受可变参数