1. ホーム
  2. c++

[解決済み】C++ std::stringが特定の文字列で始まるかどうかをチェックし、部分文字列をintに変換するにはどうすればよいですか?

2022-04-18 12:09:26

質問

下記(Pythonの疑似コード)をC++で実装するにはどうしたらいいですか?

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

(例えば argv[1]--foo=98 であれば foo_value98 .)

更新しました。 私はシンプルで小さなコマンドラインツールに非常に小さな変更を加えることを検討しているだけなので、Boostを調べるのをためらっています(小さな変更のためにBoostにリンクして使用する方法を学ぶ必要はないでしょう)。

どのように解決するのですか?

使用方法 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を返すので == 0 は偽を返します)、非効率的です(先頭だけでなく、文字列全体を調べます)。しかし、この方法では pos パラメータを 0 この場合、その位置にのみマッチするように検索が制限されます。 またはそれ以前 . 例えば

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)