2013-03-14 54 views
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。你将如何编辑这个工作?通过引用传递的c字符串的输入验证

回答

3

尝试更新:

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

到:

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

if(strExp[a]="}"||"]"||")")将永远是正确的,因为这里采用"]"")"为布尔到||运营商,以及字符串常量自己想办法解决,以非零const char * s被认为是true。而且,单=是分配,而不是比较,这意味着的if条件的所有三个部分是true

上述条件读取为:

如果(对于"}"产生的指针的低8位[真]
"]"产生的指针是非零[真]
")"产生的指针是非零[真])

什么,我想你的意思做的是

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

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

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

+0

'==',而不是'='。由于它通过引用传递,这只会编辑字符串。 – lcs 2013-03-14 02:35:50

+0

woops,赶上 – 2013-03-14 02:36:05