-10

文字列が別の文字列に何回出現するかを調べるにはどうすればよいですか?

例、2 つの文字列を入力した場合: message miSHdeOJfsfsOJdosIhisdaIhfidfgOJsde

したがって、一度表示されるため、出力は YES になります。

大文字と小文字も区別する必要があります。例: CaseSensitive 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;
}

ありがとうございました。

4

2 に答える 2

3

string::findstring::npos何も見つからない場合 ( not ) を返し、見つかっ0た場合は開始位置を返すため、条件if(a[j].find(b[j]))が間違っています。

リファレンスマニュアルを読んで、find正しい使い方を見つけてください。

(findつまり、'message' の 'esag' は見つかりますが、'abaeaear' の 'beer' は見つかりません! 後者の場合は、もっとよく考える必要があります。独自のアルゴリズムを考え出すことを意味します。)

于 2013-02-25T21:51:05.443 に答える
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;
}
于 2013-02-25T22:22:35.240 に答える