std::string
読み:エスティーディー-ストリング
外語:std::string

 標準C++ライブラリに含まれる、文字列を扱うためのクラスSTLではないが、STLと完全な互換性がある。
目次

概要
 Cには、文字列を文字列として扱う機能が無い。
 C++も同様で、やはり文字列を文字列として扱う機能は持っていないが、必要な機能はクラスとして実装され、標準ライブラリとして提供されている。

書式
 #include <string>

特徴

テンプレートクラス
 stringはクラスだが、その正体はテンプレートクラスbasic_stringである。1文字を1要素として扱う、コンテナーとして機能する。
 template <class charT, class traits = char_traits<charT>, class Allocator = allocator<charT> > class basic_string;
 typedef basic_string<char> string;
 typedef basic_string<wchar_t> wstring;
 stringはchar型だが、同様にUnicode文字wchar_t型を扱うstd::wstringがある。またC++11からは、char16_t型およびchar32_t型のものも追加された。
 typedef basic_string<char16_t> u16string;
 typedef basic_string<char32_t> u32string;
 わかりやすく言えば、例えばstd::stringはstd::basic_string<char>の別名ということである。

内部処理
 stringは、上述の通りbasic_stringクラスのtypedefである。
 クラスである以上はC++の機能で実装されているので、内部的には従来通りchar型で動作する(std::stringの場合)。
 しかしインスタンス化したクラスの実体は、あたかも文字列型の変数のように扱うことができる。
 これはC++の機能を上手く使って実現されており、例えば代入は=演算子で行なうが、この演算子はオーバーロードで実現されているのである。

利用方法
 例えば、簡単な使い方は次のようになる。
 #include <string>
 #include <iostream>
 int main() {
 using namespace std;
 string str;
 str = "abc";
 str += "def"
 cout << str << endl;
 return 0;
 }
 strにabcを代入し、その後末尾にdefを連結し、標準出力に結果を出力する。

仕様

コンストラクター
 文法は次の通り。
 string();
 string(size_type size, char chr);
 string(const char *str);
 string(const char *str, size_type size);
 string(string &str, size_type index, size_type size);
 string(input_iterator start, input_iterator end);
 上から順に、次のように文字列は作られる。

演算子
 文法は次の通り。
 s1 == s2
 s1 > s2
 s1 < s2
 s1 >= s2
 s1 <= s2
 s1 != s2
 s1 + s2
 s1 += s2
 s[]
 各文字列は、比較演算子によって比較できる。
 各文字列は、+演算子および+=演算子によって結合することができる。
 []演算子によって、特定の位置の文字を参照することができる。

メソッド
append()文字列の後ろに他の文字列を連結する
assign()文字列にテクストを割り当てる
at()指定されたインデックスの文字を返す
begin()最初の文字を示すイテレーターを返す
c_str()C言語形式の文字配列(ASCIIZ)を返す
capacity()文字列が格納できる文字数を返す
compare()2つの文字列を比較する
copy()文字列の中に文字列をコピーする
data()最初の文字へのポインタを返す
empty()文字列が空ならtrueを返す
end()文字列の最後を指すイテレーターを返す
erase()文字列の一部分を削除する
find()文字列を検索する
find_first_of()文字列を検索し、最初の要素のインデックスを返す
find_first_not_of()文字列を検索し、最初の要素でないインデックスを返す
find_last_of()文字を検索し、一番最後の要素のインデックスを返す
find_last_not_of()文字を検索し、一番最後の要素でないインデックスを返す
get_allocator()文字列のアロケーターを返す
insert()文字列の中に他の文字列を挿入する
length()文字列の長さを返す
max_size()文字列が保持することができる最大の長さを返す
rbegin()文字列の最後を示すリバースイテレーターを返す
rend()文字列の最初を示すリバースイテレーターを返す
replace()文字列の中の文字を置換する
reserve()文字を格納する容量を確保する
resize()文字列の大きさを変更する
rfind()文字列を検索し、最後の要素のインデックスを返す
size()文字列の文字数を返す
substr()文字列の一部切り出した文字列を返す
swap()2つの文字列を交換する

再検索