2013-02-25 165 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

相关问题