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

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

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

    substr関数について

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

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

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


    【なかなかエラーが解決できない…そんな悩みを解決します!】

    登録無料で始められるプログラミングスクール「侍テラコヤ」

    ・回答率100%のQ&A掲示板でエラーを解決!
    現役エンジニアとのオンライン相談で悩みを解決!
    ・50種類以上の教材で複数言語を習得!

    侍テラコヤについて詳しく見る

    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関数を使うことで、文字列から指定した範囲の文字列を取り出すことができます。もし部分文字列を取り出す方法を忘れてしまったらこの記事を確認してください。

    プログラミング学習中、
    誰かへ相談したいことはありませんか?

    SAMURAI TERAKOYA

    プログラミングはエラーの連続。作業を進めるなかで誰かに教えてほしい場面は多いですよね。

    そんな悩みを解決できるのが、侍テラコヤです。登録無料で始められて、現役エンジニアとオンラインで相談できるほか、回答率100%のQA掲示版でプログラミングに関する悩みを解決します!

    気になる方はぜひ詳細をご覧ください。

    →侍テラコヤの詳細をみる

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

    あなたの目的に合わせた
    SAMURAI ENGINEERの運営サービス

    SAMURAI ENGINEER Pro

    未経験でも挫折しないプログラミングスクール

    詳細はこちら

    SAMURAI TERAKOYA

    日本最大級のサブスク型オンラインITスクール

    詳細はこちら

    SAMURAI ENGINEER Freelance

    「一人で稼げる」スキルを身につける

    詳細はこちら
    Close