【C++】std::string::substrで部分文字列を抽出する方法

目次

はじめに

C++でstd::stringを扱う際、「文字列の先頭から5文字だけ取り出したい」「3文字目から4文字分を抜き出したい」といった、部分文字列を抽出したい場面は非常に多くあります。

この目的のために、std::stringクラスには .substr() というメンバ関数が用意されています。.substr() を使えば、開始位置と文字数を指定して、文字列の一部を新しい std::string オブジェクトとして簡単に取り出すことができます。


.substr() を使ったサンプルコード

このコードは、.substr() の主要な使い方(オーバーロード)を3つのパターンで示します。

完成コード

#include <iostream>
#include <string>

using namespace std;

int main() {
    string text = "Hello, Modern C++";
    
    cout << "元の文字列: \"" << text << "\"" << endl;
    cout << "--------------------------" << endl;
    
    // 1. 引数なし: 全体をコピー
    string sub1 = text.substr();
    cout << "substr(): " << sub1 << endl;

    // 2. 引数1つ: 指定した位置から最後までを抽出
    //    インデックス7 (文字'M') から最後まで
    string sub2 = text.substr(7);
    cout << "substr(7): " << sub2 << endl;
    
    // 3. 引数2つ: 指定した位置から、指定した文字数を抽出
    //    インデックス0 ('H') から、5文字分
    string sub3 = text.substr(0, 5);
    cout << "substr(0, 5): " << sub3 << endl;

    return 0;
}

実行結果

元の文字列: "Hello, Modern C++"
--------------------------
substr(): Hello, Modern C++
substr(7): Modern C++
substr(0, 5): Hello

コードの解説

.substr(開始位置, 文字数)

  • 機能: 文字列オブジェクトから、指定された部分文字列を新しいstd::stringオブジェクトとして返します。元の文字列は変更されません。
  • 引数:
    • 第1引数 開始位置 (pos): 抽出を開始する文字のインデックス番号(0始まり)。この引数を省略することはできません(ただし、引数なしのオーバーロードは存在します)。
    • 第2引数 文字数 (count): 抽出する文字の数。この引数を省略した場合、開始位置から文字列の最後までが抽出対象となります。

各パターンの動作

  • text.substr(): 引数がないように見えますが、これは text.substr(0) と同じ意味で、0番目から最後まで、つまり文字列全体のコピーを返します。
  • text.substr(7): インデックス7(8番目の文字'M')から、文字列の最後までを抽出します。
  • text.substr(0, 5): インデックス0から、5文字分を抽出します。

まとめ

今回は、C++のstd::stringから部分文字列を抽出する.substr()メンバ関数について解説しました。

  • .substr(開始位置): 開始位置から最後までを抽出。
  • .substr(開始位置, 文字数): 開始位置から指定した文字数分を抽出。
  • インデックスは 0始まり

.substr() は、文字列を解析したり、必要な部分だけを取り出したりと、文字列操作において最も基本的で頻繁に使われる関数の一つです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次