通过引用传递的c字串的输入验证
Input validation for a c-string that is passed by reference
#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
中启用警告,任何正常的编译器都会在那一行生成警告,因为所有的原因。
相关文章:
- 正在尝试了解输入验证循环
- 如何在C++中检查2D数组中负值的输入验证
- cin 的十进制输入验证?
- 输入验证以筛选出字符、字符串和一系列整数
- 输入验证将数字放入向量中
- 在C++中使用字符数组进行输入验证
- 在C++中使用字符数组进行用户输入验证
- C++ 中字符数组的输入验证
- 检查节点的输入验证的整数
- 如何让我的程序在输入验证的基础上读取素数
- C++ 用户输入验证无法正常工作
- 程序终止,而不是继续整数输入验证循环
- 使用REGEX进行电子邮件输入验证C
- C++:输入验证器函数
- 将用户输入验证为整数:用户必须两次输入输入
- C 输入验证
- C :对输入验证函数进行编程的性能影响可以对其进行编程,而每次都可以将其编程
- 使用模板函数进行通用输入验证
- 为什么用于输入验证的 while 循环要么完全跳过循环,要么不考虑错误的输入
- 仅 C++ 字母和空格输入验证