将特定索引处的char数组的内容与char literal进行比较 - cpp

时间:2017-07-24 21:56:41

标签: c++ arrays string char

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

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

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

基本上问题的逻辑是你一次遍历char数组一个pos,每次你得到一个开头paren,你把那个char推到堆栈上,每次你得到一个关闭paren,你比较它到堆栈顶部的char,如果它们是相同的,你弹出堆栈并继续遍历char数组。如果你得到一个关闭的paren,并且堆栈是空的,或者顶部的char与闭合的paren(即花括号而不是方括号)不匹配,则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遍历它,但我不确定如何比较这些。

我非常感谢任何帮助,谢谢

1 个答案:

答案 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