0

正規表現ライブラリを使用せずに文字列が「さようなら」で終わるかどうかを知る方法はありますか?

おそらくstrcpy、strlen、eccを使用しています。

4

4 に答える 4

5
str.length() >= 7 && str.substr(str.length() - 7) == "goodbye"

または、 boost::ends_withを使用できます。これは、新しい文字列を割り当てないため、おそらくより効率的ですstring::substr

次のように、標準ライブラリのバージョンをもう少し効率的にすることができます。

str.length() >= 7 && std::equal(str.end() - 7, str.end(), "goodbye");

実際、それを入力してみると、思ったほど面倒ではないことがわかったので、おそらく最初のバージョンよりもそれを優先する必要があります。

于 2012-04-18T14:07:05.580 に答える
3

はい、可能です。手順は 2 つあります。

  1. strlen長さを取得し、少なくとも 7 かどうかを確認するために使用します。そうでない場合は一致しません。
  2. 長さを使用して文字列の最後の 7 文字を調べ、 を使用してそれらを比較しますstrcmp
于 2012-04-18T14:07:42.163 に答える
2
#include <string>

int main(void) {
    std::string a="hellogoodbye";
    size_t pos = a.rfind("goodbye");
    if(pos != string::npos && pos == a.length() - 7) std::cout << "true";
}
于 2012-04-18T14:13:33.350 に答える
2

C:

bool ends_with(char const * string, char const * ending) {
    size_t const slen = strlen(string);
    size_t const elen = strlen(ending);
    return slen >= elen && memcmp(string+slen-elen, ending, elen) == 0;
}

C++ の場合:

bool ends_with(std::string const & string, std::string const & ending) {
    return string.length() >= ending.length() && 
           std::equal(ending.rbegin(), ending.rend(), string.rbegin());
}
于 2012-04-18T14:27:24.447 に答える