2016-11-03 66 views
0

有沒有類似「if,for loop」或搜索第一個和第二個字符串的方法,以及是否沒有字符串出現來搜索第三個字符串。多個字符串:: find

我被困在這三個。我需要以某種方式檢查在第一個和第二個字符串中是否有字符串「aba」,但是如果在第三個字符串中沒有檢查「aba」。一些想法? Tnx提前。

#include <iostream> 
#include <string.h> 

using namespace std; 

int main() { 

string s1, s2, s3; 
string aba = "aba"; 


cout << "Input s1, s2: "; 
cin >> s1; 
cin >> s2; 

s3 = s1 + s2; 

cout << "String s3 is: " << s3; 

cout << "\n\n****************************\n"; 

size_t found = s1.find(aba); 
if(found!=string::npos){  
    cout << "Have for s1."; 
} 

size_t found1 = s2.find(aba); 
if(found1!=string::npos){ 
    cout << "Have for s2."; 
} 

size_t found2 = s3.find(aba); 
if(found2!=string::npos){ 
    cout << "Have for s3."; 
} 


} 
+2

拿出一張紙。寫下您提出的邏輯算法,以簡單,簡短的邏輯步驟完成此任務。就像「搜索第一個字符串,如果找到了,請執行以下操作」。等等。 [用你的橡皮鴨討論你的寫下邏輯](https://en.wikipedia.org/wiki/Rubber_duck_debugging)。一旦你的橡皮鴨認同它可以工作,只需將書面的邏輯過程直接轉換成C++。任務完成。 –

+0

也許你需要的只是一個'&&'操作符? – johnchen902

+0

@ johnchen902問題是我沒有得到什麼循環使用,因爲它已經使用IF循環,我不能再次使用它?我迷了哈哈哈...... – Beansolder

回答

2

不知道你的意思是由最好的,但保持你的變量名,這是略有清潔恕我直言。

if((found != string::npos) && (found1 != string::npos)) 
{ 
    cout << "There is for s1 i s2.\n"; 
} 
else 
{ 
    cout << "Don't have for s1 i s2, search in s3.\n"; 
    if(found2 != string::npos) 
    { 
     cout << "There is for s3.\n"; 
    } 
    else 
    { 
     cout << "Don't have for s3.\n"; 
    } 
} 

的& &運營商將short-circuit並沒有在代碼串的重複。如果你需要改變字符串(雖然它似乎是一個玩具的例子,我懷疑它),你可以在一個地方(DRY principle的小應用)做到這一點。

+0

Tnx,這看起來乾淨漂亮。我的一切都搞砸了,但是它很有效。^_ ^ – Beansolder

0

終於做到了,但這是最好的辦法嗎?

if(found != string::npos){ 
    if(found1 != string::npos){ 
     cout << "\nThere is for s1 i s2."; 
    } else { 
     cout << "\nDon't have for s1 i s2, search in s3."; 
     if(found2 != string::npos){ 
      cout << "\nThere is for s3."; 
     } else { 
      cout << "\nDon't have for s3."; 
     } 
    } 
} else { 
    cout << "\nDon't have for s1 i s2, search in s3."; 
    if(found2 != string::npos){ 
      cout << "\nThere is for s3."; 
     } else { 
      cout << "\nDon't have for s3."; 
     } 
}