tipsです。ほぼ標準リファレンスの輪読ですが、ここでは部分文字列を取得する問題など、問題解きやすくするtipsも込めています。
std::basic_string::substr
substr()
第一引数 pos:開始位置
第二引数 npos:開始位置からの要素数
要件:
pos <= size()
もし、npos > size() - posならば、size() - posが指定される。
つまり、指定した開始位置からの要素数が、元の配列の末尾までの要素数を上回ると、末尾までの要素を指定したものとして値が返される。
文字列内で、インデックス(i, j]の部分文字列を切り出したい場合は、substr(i, i-j)
とすれば良い
例
#include <iostream>
using namespace std;
int main(){
string a = "abc";
// 0番目から要素数を指定する場合
cout << a.substr(0, 2) << endl; // ab
cout << a.substr(0, 3) << endl; // abc
// 1文字取り出す場合
cout << a.substr(2, 1) << endl; // c
// 末尾の要素までの要素数を超える場合
cout << a.substr(2, 4) << endl; // c
}
output
ab
abc
c
c