パープルハット

※当サイトではGoogleアドセンス広告を利用しています

C++ substrで文字列取り出し



substrとは

  • C++におけるstd::stringから一部の文字列を取り出す処理(例:「Hello world!」から「world」のみを取り出す)
  • ↓↓本記事でも参考にした日本語リファレンス

basic_string::substr - cpprefjp C++日本語リファレンス



使い方

引数の指定方法

第1引数:pos

  • 何文字目から切り出すかを指定。
  • 先頭を0文字目とカウントする点に注意。

第2引数:n

  • 合計で何文字取り出すかを指定。
  • 指定しない場合は、第1引数で指定した文字から末尾まで取り出す。
  • 文字サイズをオーバーする値や負の数を指定した場合、エラーは出ずに末尾まで取り出す。



使用例1:基本的な使用

ソースコード

#include <iostream>
#include <string>

int main() {

    // 操作したい文字列を宣言して表示
    std::string s = "abcdefg";
    std::cout << "s = " << s << std::endl;

    // 2文字目(c)から末尾まで取り出す
    std::string a = s.substr(2);
    std::cout << "s.substr(2) = " << a << std::endl;

    // 2文字目(c)から3文字だけ取り出す
    std::string b = s.substr(2, 3);
    std::cout << "s.substr(2, 3) = " << b << std::endl;
}


実行結果

s = abcdefg
s.substr(2) = cdefg
s.substr(2, 3) = cde



使用例2:エラーではないが指定した数値と異なる動作

ソースコード

#include <iostream>
#include <string>

int main() {

    // 操作したい文字列を宣言して表示
    std::string s = "abcdefg";
    std::cout << "s = " << s << std::endl;

    // 2文字目から12文字取り出す(オーバーするため末尾まで取り出される)
    std::string c = s.substr(3, 12);
    std::cout << "s.substr(3, 12) = " << c << std::endl;

    // 2文字目から-1文字取り出す(2文字目から末尾まで取り出される)
    std::string d = s.substr(3, -1);
    std::cout << "s.substr(3, -1) = " << d << std::endl;
    
    // 第1引数が未指定の場合(全部取り出される)
    std::string e = s.substr();
    std::cout << "s.substr() = " << e << std::endl;
}


実行結果

s = abcdefg
s.substr(3, 12) = defg
s.substr(3, -1) = defg
s.substr() = abcdefg