2013-02-25 162 views
-9

如何查找字符串在另一個字符串中出現的次數?查找另一個字符串出現多少次? (C++)

實施例中,如果I輸入兩個字符串: 消息miSHdeOJfsfsOJdosIhisdaIhfidfgOJsde

所以,出現一次,因此,輸出應爲YES。

它必須是區分大小寫爲好,例如: 大小寫敏感的CASESENSITIVE應該輸出「NO」,因爲它不會出現。

#include <iostream> 
using namespace std; 
int main() 
{ 

    string a[100],b[100]; 
    int n; 
    cin >> n; 
    for(int i=0;i<n;i++) 
    { 
     cin >> a[i] >> b[i]; 
    } 
    for(int j=0;j<n;j++) 
    { 
     if(a[j].find(b[j])) 
     cout << "YES" << endl; 
     else 
     cout << "NO" << endl; 
    } 
    return 0; 
} 

謝謝。

+6

你嘗試過什麼,它有什麼作用,這是什麼不能做? ...(blah,blah,blah) – KevinDTimm 2013-02-25 21:10:17

+1

使用std :: string ::在計數器的while循環中查找以保持跟蹤 – dchhetri 2013-02-25 21:10:18

+0

更新了我到目前爲止的內容。我幾乎卡住了......有幫助嗎? – 2013-02-25 21:43:58

回答

3

string::find回報string::npos如果沒有找到(不0)和起始位置,如果它被發現,所以你的條件if(a[j].find(b[j]))是錯誤的。

閱讀a reference manual找出如何使用find正常。

find如果在一塊時只會搜索字符串,例如,它找到的「消息」 ESAG',但不是「abaeaear」啤酒'!後者需要更多的思考,如果是這樣的任務那麼你很可能意味着要拿出自己的算法)

+0

這不是家庭作業,我在spoj.com上做了挑戰。 – 2013-02-25 22:10:41

+0

這裏是我的代碼: '#包括 使用命名空間std; INT主() { 串[100],B [100]; int n; cin >> n; string :: size_type m; 對(INT I = 0; I > A [1] >> B [I]; } 對(INT J = 0;Ĵ 2013-02-25 22:11:38

0

,你可以嘗試這樣的事情:

int find_n_substr(const string& s, const string& key){ 

    int n = 0; 
    string::size_type sz = 0; 

    while ((sz = s.find (key,sz)) != string::npos ){ 
     sz++; /*otherwise you start searching at your previous match*/ 
     n++; 
    } 
    return n; 
} 
+0

是的,但這隻適用於如果有EXACT字詞的話......我需要找到換句話說,在kaeaya之間找到關鍵的例子。 – 2013-02-25 22:53:58

相關問題