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

Input validation for a c-string that is passed by reference

本文关键字:输入 验证 引用      更新时间:2023-10-16
#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。你会如何编辑它使其工作?

尝试更新:

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

:

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

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

上面的条件读作:

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

我想你的意思是

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

还注意这里的双引号被单引号替换了。检查单个字符时使用单引号而不是双引号。也可以使用==进行比较。

如果你用g++编译,你应该在g++ -Wall -Wextra中启用警告,任何正常的编译器都会在那一行生成警告,因为所有的原因。