スライドショー

【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

    無料でSEからWebエンジニアへ転職しませんか?



    侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

    • システムエンジニアという職業だけどコードが書けない
    • 事務作業が多くスキルがないため将来が不安
    • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
    という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

    弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

    既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

    まずは無料体験レッスンを予約する

    書いた人

    MoritaIssei

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

    おすすめコンテンツ

    あなたにぴったりなプログラミング学習プランを無料で診断!

    プログラミング学習の効率を劇的に上げる学習メソッドを解説