对通过引用传递的c字符串的输入验证

时间:2013-03-14 02:21:15

标签: c++ cstring c-strings

#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;
}

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

2 个答案:

答案 0 :(得分:3)

尝试更新:

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

为:

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

答案 1 :(得分:3)

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

以上条件读作:

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

我认为你的意思是

")"

另请注意,双引号在此处替换为单引号。在检查单个字符而不是双引号时使用单引号。也可以使用if(strExp[a]=='}' || strExp[a]==']' || strExp[a]==')')进行比较。

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