std ::文字列比較(文字列が別の文字列で始まるかどうかを確認してください)

StackOverflow https://stackoverflow.com/questions/931827

  •  06-09-2019
  •  | 
  •  

質問

私はSTDかどうかを確認する必要があります。文字列は「XYZ」で始まります。私は、文字列全体を検索するか、SUBSTRとの一時的な文字列を作成せずにそれを行うにはどうすればよい()。

役に立ちましたか?

解決

私はメソッドを比較する使用します:

std::string s("xyzblahblah");
std::string t("xyz")

if (s.compare(0, t.length(), t) == 0)
{
// ok
}

他のヒント

標準ライブラリの精神に合わせて、より多くの独自BEGINS_WITHアルゴリズムを定義するだろうことがあります。

アプローチます。

#include <algorithm>
using namespace std;


template<class TContainer>
bool begins_with(const TContainer& input, const TContainer& match)
{
    return input.size() >= match.size()
        && equal(match.begin(), match.end(), input.begin());
}

これは、クライアントコードにシンプルなインターフェイスを提供し、ほとんどの標準ライブラリのコンテナと互換性があります。

ブーストの文字列アルゴのライブラリに見て、それはあなたのプロジェクトでブーストライブラリの一部のみを使用したい場合は、あなただけの必要なファイルをコピーするために、BCPユーティリティを使用することができるなどstarts_with、istart_with(大文字小文字を区別しない)、などの便利な機能の数を持っています。

のstd ::文字列:: starts_withは、内部C ++ 20で、一方のstd ::文字列::検索するには、

を使用することができているようです
std::string s1("xyzblahblah");
std::string s2("xyz")

if (s1.find(s2) == 0)
{
   // ok, s1 starts with s2
}

私は、私は完全にあなたの質問を理解していないよ感じています。それは些細なあるべきかのように見えます:

s[0]=='x' && s[1]=='y' && s[2]=='z'

これは最初の三文字だけ(最大で)に見えます。コンパイル時に不明な文字列のための一般化がループして上記を置き換えるために、あなたが必要になります:

// look for t at the start of s
for (int i=0; i<s.length(); i++)
{
  if (s[i]!=t[i])
    return false;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top