0
#include "cstack.h"
#include <iostream>
#include <cstring>
using namespace std;

bool isValidExpression (CStack&, char*);

int main (void)
{
    char expression[21];
    expression[0-21]=0;
    cout<< "Enter an expression: ";
    cin >>expression;
    CStack stack1;

    if (isValidExpression (stack1, expression)==true)
    {
        cout << "\nIt's a valid expression";
    }
    else
    {
        cout << "\nIt's NOT a valid expression";
    }
    return 0;
}

bool isValidExpression (CStack& stackA, char* strExp)
{
    for(int a=0;a<21 && strExp[a]!=0;a++)
    {
        if(strExp[a]="}"||"]"||")") //This is the issue right here
        {
            cout<<"Action A" <<endl;
        }
        else
        {
            stackA.push(strExp[a]);
        }
    }
    return true;
}

我遇到的问题是,无论我输入什么,Action A 总是会发生。例如,如果我输入 [,我仍然会得到不是所需结果的操作 a。我一直用字符串来做这样的事情,但我们需要在这个程序中使用 cstring。您将如何编辑它以使其工作?

4

2 回答 2

3

尝试更新:

if(strExp[a]="}"||"]"||")")

至:

if(strExp[a]=='}'|| strExp[a]==']'|| strExp[a]==')' )
于 2013-03-14T02:23:54.343 回答
3

if(strExp[a]="}"||"]"||")")将始终为真,因为它使用"]"and")"作为运算符的布尔值||,并且字符串常量本身解析为被认为是 的非零const char *s true。此外,单=是赋值,而不是比较,这意味着条件的所有三个部分if都是true

上述条件如下:

"}"if(为[true]生成的指针的低 8 位
或生成的指针为"]"非零 [true]
或生成的指针为")"非零 [true])

我认为你的意思是

if(strExp[a]=='}' || strExp[a]==']' || strExp[a]==')')

另请注意,这里的双引号替换为单引号。检查单个字符时使用单引号而不是双引号。也==用于比较。

如果您正在使用 进行编译,g++则应该使用 启用警告g++ -Wall -Wextra,任何理智的编译器都会出于所述的所有原因在该行上生成警告。

于 2013-03-14T02:24:07.440 回答