導入
std::string には、部分を取り出したり、位置を探したり、書き換えたりする便利なメソッドがそろっています。実務では文字列処理が本当によく出てくるので、代表的なものを押さえておきましょう。
説明
1文字ずつのアクセスは、配列と同じ [] か、範囲チェック付きの .at() で行います。部分文字列は .substr(開始, 長さ)、探すのは .find() です。
#include <iostream>
#include <string>
using namespace std;
int main() {
string s = "BecomeCoder";
cout << s[0] << endl; // B(添字アクセス)
cout << s.substr(0, 6) << endl; // Become(0文字目から6文字)
cout << s.substr(6) << endl; // Coder(6文字目から最後まで)
size_t pos = s.find("Coder"); // 見つかった位置(なければ string::npos)
if (pos != string::npos) {
cout << "Coder は " << pos << " 文字目" << endl; // 6 文字目
}
return 0;
}
代表的なメソッドを整理します。
flowchart LR s["string s"] --> a[".length() / .size()<br/>長さ"] s --> b[".substr(i, n)<br/>部分文字列"] s --> c[".find(x)<br/>位置を探す"] s --> d[".replace(i, n, x)<br/>置き換え"] s --> e[".push_back(c) / +=<br/>末尾に追加"] s --> f[".insert / .erase<br/>挿入・削除"]
書き換えは .replace()、途中への挿入は .insert()、削除は .erase() です。1文字追加は .push_back() でもできます。
#include <iostream>
#include <string>
using namespace std;
int main() {
string s = "I like C";
s.replace(7, 1, "C++"); // 7文字目から1文字を "C++" に置き換え
cout << s << endl; // I like C++
s.insert(0, ">> "); // 先頭に挿入
cout << s << endl; // >> I like C++
for (char c : s) { // 1文字ずつ回す(範囲for)
if (c == '+') cout << "プラス発見" << endl;
}
return 0;
}
まとめ
substr / find / replace / insert / erase を覚えると、たいていの文字列処理はできます。find が見つからないときは string::npos を返す、という点だけ注意しましょう。