【C++入門】substr関数で文字列の一部を得る方法

C++では、文字列から抽出して切り出すためにsubstr関数が用意されています。指定した範囲の文字列を得るために使うsubstr関数の使い方について学習していきましょう。この記事では、

  • substr関数について
  • substr関数の使い方
  • という基本的な内容から、substr関数を使って後ろから取得する方法などの応用的な使い方に関しても解説していきます。今回はこれらの方法を覚えるために、文字列の比較をするさまざまな使い方をわかりやすく解説します!

    substr関数について

    それではsubstr関数について見ていきましょう。substr関数はstringクラスの関数で、文字列から位置と長さを指定して文字列の一部を切り出すことができる関数です。例えば以下のように文字列が宣言されているとします。

    std::string str = "samurai, engineer";

    この時0から長さ7までを取り出すことで、samuraiの部分文字列を得ることができます。

    substr関数の使い方

    substr関数はstringクラスの関数なので、<string>ライブラリをインクルードする必要があります。基本的な使い方は以下になります。

    std::string str = 文字列;
    str.substr(開始位置, 取り出す長さ);

    取り出す長さは省略することができ、その場合は指定した位置から最後までの部分文字列を取得できます。

    substr関数で指定した位置から最後までの部分文字列を取得する方法

    取り出す長さを省略することで、文字列の指定した位置から最後までの部分文字列を抽出することができます。次のプログラムで確認してみましょう。

    #include <iostream>
    #include <string>
    
    int main() {
        std::string str = "samurai,engineer!";
    
        std::string substr = str.substr(8);
    
        std::cout << substr << std::endl;
    
        return 0;
    }

    実行結果:

    engineer!

    今回は"samurai,engineer!"という文字列から"engineer!"の部分のみを抽出するためにsubstr(8)と記述して、8番目から最後までの文字列を抽出することができます。

    substr関数で指定した範囲の部分文字列を取得する方法

    第2引数を指定すると、取り出す範囲を決めることができます。次のプログラムで確認してみましょう。

    #include <iostream>
    #include <string>
    
    int main() {
        std::string str = "samurai,engineer,se!";
    
        std::string substr = str.substr(8, 8);
    
        std::cout << substr << std::endl;
    
        return 0;
    }

    実行結果:

    engineer

    substr(8,8)のようにすることで、"samurai,engineer,se!"から8番目から8つ分の部分文字列を抽出することができます。

    substr関数を使って後ろから取得する方法

    substr関数では後ろから文字列を指定した範囲で抽出したい時にはどうするのでしょうか。C++では後ろから指定した範囲で抽出する関数は用意されていないため自作をする必要があります。length関数を使うと文字列のサイズを得ることができるため、後ろから3つめは

    str.length - 3

    のようにして後ろから3つめが前から何番目か取得することができます。次のプログラムで確認してみましょう。

    #include <iostream>
    #include <string>
    
    std::string substrBack(std::string str, size_t pos, size_t len) {
        const size_t strLen = str.length();
    
        return str.substr(strLen - pos, len);
    }
    
    int main() {
        std::string str = "samurai,engineer,se!";
    
        std::string substr = substrBack(str, 3, 2);
    
        std::cout << substr << std::endl;
    
        return 0;
    }

    実行結果:

    se

    substrBack関数を自作して、substrBack(str, 3, 2)で文字列の最後から3番めで長さが2の文字列を抽出することができます。

    まとめ

    いかがだったでしょうか?今回はsubstr関数の使い方を解説しました。substr関数を使うことで、文字列から指定した範囲の文字列を取り出すことができます。もし部分文字列を取り出す方法を忘れてしまったらこの記事を確認してください。

    LINEで送る
    Pocket

    ITエンジニアへ転職したい方におすすめ

    自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
    エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

    しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

    こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

    そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

    侍ワークスは、独自案件を多く掲載しているだけでなく、

    ・応募から就業まで一貫したサポート

    ・就業後もアフターフォロー

    といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

    まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

    書いた人

    MoritaIssei

    ご閲覧いただきありがとうございます。森田一世と申します。プログラマーとしてRaspberry piを使ったり、記事を作成しています。