Understanding How std::string::substr works

STLPythonで範囲指定の多くは左閉半開区間を基調にしています。しかし、std::string::substrでの範囲指定は大きく異なり、戸惑います。気が付くと実装時に繰り返し同じことを考え、無駄を感じていたのでまとめてみました。


以下はstring::substr - C++ Referenceからの抜粋したstd::string::substrの書式です。

string substr (size_t pos = 0, size_t len = npos) const;

string::substr - C++ Reference

冒頭で触れたように、STLでは左閉半開区間での範囲指定を基調としていますが、std::string::substrではposとlen、つまり、位置と長さで範囲を指定します。

位置は0ベースで指定します。

指定した範囲が文字列の後ろ側にはみ出してしまっても適切に処理をします。

第2引数は省略可能で、デフォルトの値はstd::string::nposです。これを用いると、文字列の最後までが処理の対象になります。

位置posは文字列の長さまで指定することができます。文字列の長さを指定したときは、空文字を返します。それ以降を指定すると例外が発生します。

文字列をある位置で2つに分割する機会はなかなか多いのではないでしょうか? 以下はその例です。この場合、前半の文字列の長さを後半の文字列の開始位置とします。

前半の開始位置が0ではない場合は以下の式を用いるとよいでしょう。後半の文字列の開始位置は前半の開始位置にその長さを足した値とします。

以下はその例です。


Effective STL―STLを効果的に使いこなす50の鉄則

Effective STL―STLを効果的に使いこなす50の鉄則

  • 作者: スコットメイヤーズ,Scott Meyers,細谷昭
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2002/01
  • メディア: 単行本
  • 購入: 9人 クリック: 155回
  • この商品を含むブログ (95件) を見る