[英]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.