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