簡體   English   中英

為什么我的或語句不起作用,C ++?

[英]Why isn't my or statement working, 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; 

}

你需要

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

您每次都必須重復測試,“ 1”,“ 2”本身基本上都是小整數,並且評估為true。 它應如下所示:

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

表達式str_in[i] == '0' || '1' || '2' str_in[i] == '0' || '1' || '2' str_in[i] == '0' || '1' || '2'包含三個單獨的表達式:

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

根據任何ASCII圖表,“ 0”的值為48,“ 1”為49,“ 2”為50。因此,最后兩個表達式始終為非零值(因此始終為true)。

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

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];
}

'1'為'1',因此'1'計算為true。 您必須與每個操作員一起做出新的,完整的聲明。

嘗試這個:

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

您的if語句如下:如果i處的字符等於'0' ,或者'1'為true,或者'2'為true。 由於'1''2'都計算為非零整數,因此它將始終為真。

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

不確定整體邏輯,但是這里的邏輯特別錯誤。 更換

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

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

將您的if語句更改為:

if ( str_in[i] == '0' || str_in[i] == '1' || str_in[i] == '2') {
...
}
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;  

}

您需要在每個||中應用相等運算符 表達:

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

如果您使用的是c ++,請使用標准庫:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM