湯LOG

主に自分用のメモ

意外と便利な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メンバ関数でもできます。

[追記]
STLのコンテナのほとんどにassignメンバ関数があるんですね。知らなかった。
はずかちい。