为什么我的或声明不起作用,C ++?

时间:2010-11-03 20:17:44

标签: c++

我正在尝试创建一个用字符串中的空格替换0,1或2的函数。我通过迭代字符串并比较每个字符来实现它。

如果我比较 str_in [i] =='0',我的功能将起作用,但如果我添加or语句则不返回任何内容。

段:

string omit_num( string ) {
    int i ;

    str_len = str_in.length();
    str_out = "" ; 

    for( i = 0 ; i < str_len ; i ++ ){
         cout << str_in[i] << endl; 
         if ( str_in[i] == '0' || '1' || '2') 
            app = " " ;
         else
             app = str_in[i];
         str_out.append(app) ; 
    }
    return str_out; 

}

11 个答案:

答案 0 :(得分:11)

你需要

if ( str_in[i] == '0' ||  str_in[i] =='1' ||  str_in[i] =='2') 

答案 1 :(得分:6)

每次都要重复测试,'1','2'本身基本上是小的并且评估为真。它应如下所示:

if (str_in[i] == '0' || str_in[i] == '1' || str_in[i] == '2')

答案 2 :(得分:4)

表达式str_in[i] == '0' || '1' || '2'包含三个单独的表达式:

str_in[i] == '0'
'1'
'2'

根据任何ASCII图表,'0'的值为48,'1'为49,'2'为50.因此最后两个表达式始终为非零(因此始终为真)。

你可能想要str_in[i] == '0' || str_in[i] == '1' || str_in[i] == '2'

答案 3 :(得分:4)

if (str_in[i] == '0' || str_in[i] == '1' || str_in[i] == '2')

或者

switch (str_in[i]) {
  case '0':
  case '1':
  case '2': app = " " ;
            break;
  default:  app = str_in[i];
}

答案 4 :(得分:3)

'1'为'1'因此'1'的计算结果为真。您必须为每个操作员制作新的,完整的陈述。

试试这个:

if ( str_in[i] == '0' || str_in[i] == '1' || str_in[i] == '2' )

答案 5 :(得分:3)

您的if语句如下所示:如果i处的字符等于'0',或'1'为真,或'2'为真。由于'1''2'都计算为非零整数,因此它始终为真。

你想要的是:str_in[i] == '0' || str_in[i] == '1' || str_in[i] == '2'

答案 6 :(得分:1)

不确定整体逻辑,但这里的逻辑特别错误。取代

if ( str_in[i] == '0' || '1' || '2') 

if ( str_in[i] == '0' || str_in[i] == '1' || str_in[i] == '2') 

答案 7 :(得分:1)

将您的if语句更改为:

if ( str_in[i] == '0' || str_in[i] == '1' || str_in[i] == '2') {
...
}

答案 8 :(得分:1)

string omit_num( string ) { 
int i ; 

str_len = str_in.length(); 
str_out = "" ;  

for( i = 0 ; i < str_len ; i ++ ){ 
     cout << str_in[i] << endl;  
     if ( str_in[i] == '0' || '1' || '2')  
        app = " " ; 
     else 
         app = str_in[i]; 
     str_out.append(app) ;  
} 
return str_out;  

}

这将如下工作:

string omit_num( string ) { 
int i ; 

str_len = str_in.length(); 
str_out = "" ;  

for( i = 0 ; i < str_len ; i ++ ){ 
     cout << str_in[i] << endl;  
     if ( (str_in[i] == '0') || (str_in[i] == '1') || (str_in[i] == '2'))  
        app = " " ; 
     else 
         app = str_in[i]; 
     str_out.append(app) ;  
} 
return str_out;  

}

答案 9 :(得分:1)

您需要在每个||中应用相等运算符表达式:

if (str_in[i] == '0' || str_in[i] == '1' || str_in[i] == '2')

答案 10 :(得分:0)

如果您使用的是c ++,请使用标准库:

std::replace_if( s.begin(), s.end(), [](char a){return a=='0'||a=='1'||a=='2';}, ' ');