C++ std::string が特定の文字列で始まっているかどうかを確認し、部分文字列を int に変換するにはどうすればよいでしょうか? 質問する

C++ std::string が特定の文字列で始まっているかどうかを確認し、部分文字列を int に変換するにはどうすればよいでしょうか? 質問する

次の (Python 疑似コード) を C++ で実装するにはどうすればよいですか?

if argv[1].startswith('--foo='):
    foo_value = int(argv[1][len('--foo='):])

(たとえば、argv[1]が の場合--foo=98、 はfoo_valueです98。)

更新:私は、単純な小さなコマンドライン ツールにごく小さな変更を加えるだけなので、Boost を調べることに躊躇しています (小さな変更のために Boost にリンクして使用する方法を学習するのは避けたいです)。

ベストアンサー1

使用rfind検索位置posパラメータを受け取り、それにゼロを渡すオーバーロード:

std::string s = "tititoto";
if (s.rfind("titi", 0) == 0) { // pos=0 limits the search to the prefix
  // s starts with prefix
}

他に何か必要な人はいますか? 純粋な STL です!

多くの人はこれを「プレフィックスを探して文字列全体を逆方向に検索する」という意味だと誤解しています。これでは間違った結果になり (たとえば、string("tititito").rfind("titi")は 2 を返すので、 と比較するとfalse が返される)、非効率的になります (先頭だけでなく文字列全体を検索するため)。しかし、これはパラメータを として== 0渡すため、そのようにはなりません。これにより、検索はその位置またはそれ以前のにのみ一致するように制限されます。例:pos0

std::string test = "0123123";
size_t match1 = test.rfind("123");    // returns 4 (rightmost match)
size_t match2 = test.rfind("123", 2); // returns 1 (skipped over later match)
size_t match3 = test.rfind("123", 0); // returns std::string::npos (i.e. not found)

C++20以降では、両方ともずっとシンプルになりましstd::stringstd::string_viewstarts_with:

std::string s = "tititoto";
if (s.starts_with("titi"s)) {
  // s starts with prefix
}

おすすめ記事