Проверка ввода для c-строки, которая передается по ссылке

#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 в этой программе. Как бы вы отредактировали это, чтобы оно заработало?

0

Решение

Попробуйте обновить:

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

чтобы:

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

Другие решения

if(strExp[a]="}"||"]"||")") всегда будет правдой, потому что это использует "]" а также ")" как логическое значение для || операторы и сами строковые константы преобразуются в ненулевое const char *с которые считаются true, Кроме того, сингл = это назначение, а не сравнение, это означает, что все три части if состояние true

Вышеуказанное условие гласит:

if (младшие 8 битов указателя, сгенерированные для"}"[правда] или указатель, сгенерированный для "]" отличен от нуля [верно] или указатель, сгенерированный для ")" ненулевое [true])

то, что я думаю, ты хочешь сделать, это

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

Также обратите внимание, что здесь двойные кавычки заменяются одинарными. Используйте одинарные кавычки при рассмотрении одного символа, а не двойные. Также используйте == для сравнения.

Если вы компилируете с g++ Вы должны включить предупреждения с g++ -Wall -Wextraлюбой здравомыслящий компилятор сгенерировал бы предупреждения в этой строке по всем указанным причинам.

3

По вопросам рекламы [email protected]