意外と便利なstringクラスのassignメンバ関数
今回はC++標準ライブラリで、文字列を簡単に扱えるstd::stringクラスについて。
ディレクトリやファイル名など、各要素を分割して取得したいときなどはboost::filesystem::pathなどをよく使うのですが、文字列のここからここまでだけ抜き出したい!とか数字のとこだけ抜き出したいってときにはstringクラスのassignメンバ関数が便利です。
assignメンバ関数
一部の機能は、std::string::operator=と同じですが、assignのほうがコンストラクタと同様に機能が豊富です。
#include <iostream> #include <string> int main() { std::string str1("abcde"); std::string str2; str2.assign(str1); // 他の std::string から代入 std::cout << str2 << std::endl; str2.assign(str1, 1, 3); // str1[1] から 3文字を代入 std::cout << str2 << std::endl; str2.assign("xyz"); // const char*型から代入 std::cout << str2 << std::endl; str2.assign("xyzxyz", 4); // "xyzxyz" の先頭から 4文字を代入 std::cout << str2 << std::endl; str2.assign(5, 'a'); // 5個の 'a' を代入 std::cout << str2 << std::endl; str2.assign(&str1[0], &str1[3]); // 指定範囲を代入 std::cout << str2 << std::endl; }
実行結果
abcde bcd xyz xyzx aaaaa abc
ちなみに、似たようなことはsubstrメンバ関数でもできます。