2

オライリーの教科書を自分で完成させようとしていますが、質問が非常に難しくなり始めています。プログラミングの問題まですべてのページを読んでいるので、理解する必要があります。しかし、誰かがこの質問の意味を説明できますか? "string1 が string2 で始まる場合に true を返す関数 begin(string1, string2) を作成します。関数をテストするプログラムを作成します"

私が知っていることから始めましょう。関数を作成してメインで呼び出す方法を知っています。私が知らないのは、文字列が別の文字列を開始することの意味と、それをどのように行うかです. 説明がいいでしょう。例としてコードを提供する場合は、関数またはプログラム全体に回答しないでください。私は本当に学びたいと思っており、自分でプログラムを完成させたいと思っています。ありがとう。


助けてくれてありがとう、しかし今、プログラムを実行しようとすると問題が発生します。string1 には「hel」、string2 には「hello」と入力します。助言がありますか?

#include <iostream>
#include <string>

std::string string1;
std::string string2;
bool begins(std::string string1, std::string string2);


int main()
{
    std::cout << "Please enter two strings: ";
    std::getline(std::cin, string1);
    std::getline(std::cin, string2);

    begins(string1, string2);
    std::cout << string1 << "begins" << string2;


    return 0;

}

bool begins(std::string string1, std::string string2)
{
    if (begins(string1, string2) == true)
        return true;

    else
        return false;
}
4

4 に答える 4

3

文字列が別の文字列で始まる は、文字列が別の文字列の接頭辞であることを表す別の方法です。次に例を示します。hellは のプレフィックスですhello

チェック アルゴリズムは比較的単純です。(1) 候補のプレフィックス文字列が終了するか、(2) 違いが見つかるまで、文字列の比較を 1 文字ずつ開始します。違いを見つける前にプレフィックスが終了した場合は、true;を返します。それ以外の場合は、次を返しfalseます。

bool begins(std::string string1, std::string string2)
{
    if (string1.size() > string2.size) return false;
    for (int i = 0 ; i != string1.size() ; i++) {
        if (string1[i] != string2[i]) {
            return false;
        }
    }
    return true;   
}

この関数をテストすると、2 つの「主流」のケース (つまり、string1が のプレフィックスであるstring2場合と、string1が のプレフィックスでない場合string2) といくつかの「コーナー ケース」をチェックする必要があります。

  • true空の文字列は任意の文字列のプレフィックスであるため、最初の文字列は empty - returnです。
  • 2 番目の文字列が空ですtrue-最初の文字列も空である場合、またはそうでない場合に戻りfalseます。
  • 最初の文字列が 2 番目の文字列よりも長い-false短い 2 番目の文字列と長い "プレフィックス" が完全に一致する場合でも返されます。
于 2013-05-29T16:27:39.333 に答える
2

文字列は文字列で"Hell"始まります"Hello World"

したがって、このコード スニペットは"This is correct"、両方のステートメントでメッセージを出力する必要があります。

if (begins("Hell", "Hello World") == true) {
    cout << "This is correct" << endl;
}

if (begins("globe", "Hello World") == false) {
    cout << "This is also correct" << endl;
}
于 2013-05-29T16:27:16.930 に答える
2

これは、string2 == string1 の開始を意味していると思います。たとえば、string1「foo」であり、string2「foobar」である場合。

于 2013-05-29T16:27:49.557 に答える
1

C++ では、文字列は単なる文字の配列です。

| H | E | L | L | O |  | W | O | R | L | D | \0 |

上記は を表す文字列です"Hello World"

問題の関数はこのようなことをします

bool begins(std::string A, std::string B)
{
  return A.substr(0, B.length()) == B;
}

これは、 stringが position から始まる部分文字列Bと一致するかどうかをチェックします。A0

begins("Hello World", "Hello") -> True
begins("Hello World", "Goodbye World") -> False
于 2013-05-29T16:30:24.620 に答える