0

私はこのサイトに不慣れで、誰かが私の質問を解決する方法を知っているかどうか尋ねたいと思います。ネットを何時間も検索しましたが、自分に合ったものは見つかりませんでした。どんな助けでもありがたいです。

1)単語を要求する関数を作成する必要があります。
2)この単語を配列に追加します。
3)単語が指定された単語と一致する場合は、文字列を検索します。
4)trueの場合はブール値の戻り値、それ以外の場合はfalse。

これが私の関数でこれまでに行ったことです。だから私はそれに近いと信じています(単語を検索するために必要なのはforループだけです)。

bool checkValidTitle( string modules[MODULENO+1]){
    string array[1][20];
    cout<< "Put the module: ";
    cin>> array[1][20]; 
}
4

2 に答える 2

1

これはあなたが書くように求められている関数です

bool checkValidTitle(string modules[], string word_to_check)
{
  for (int i = 1; i <= MODULENO; ++i)
    if (modules[i] == word_to_check)
       return true;
  return false;
}

このように使用してください

string modules[MODULENO+1] = {"", "Maths", "Sciences", "French", "English"};
if (checkValidTitle(modules, "Maths"))
   cout << "Maths is valid\n";
else
   cout << "Maths is not valid\n";
if (checkValidTitle(modules, "Russian"))
   cout << "Russian is valid\n";
else
   cout << "Russian is not valid\n";

残りはあなたにお任せします。

于 2012-07-29T14:58:30.670 に答える
0

最初の文字列に2番目の文字列が含まれている場合、ブール値を返す関数をその日に書き戻しました。

bool contains(const std::string & str, const std::string substr)
{
    if(str.size()<substr.size()) return false;

    for(int i=0; i<str.size(); i++)
    {
        if(str.size()-i < substr.size()) return false;

        bool match = true;
        for(int j=0; j<substr.size(); j++)
        {
            if(str.at(i+j) != substr.at(j))
            {
                match = false;
                break;
            }
        }
        if(match) return true;
    }
    return false;
}

私はしばらくの間それをテストしました、それはうまくいくようです。ブルートフォースで検索しますが、できる限り最適化しようとしました。

この方法を使用すると、次のことができます。

std::string main_str = "Hello world!";
std::string sub_str = "ello";
std::string sub_str2 = "foo";

bool first = contains(main_str, sub_str); //this will give you true
bool second = contains(main_str, sub_str2); //this will give you false

文字列の配列で何が必要かはよくわかりませんが、これを使用すると、目的の出力を取得できると思います。

于 2012-07-29T14:46:14.183 に答える