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);

上から順に、次のように文字列は作られる。

  • 引数なし ‐ 空の文字列を作る
  • sizeとchr ‐ size個のchrの文字列を作る
  • strとsize ‐ strのうち長さsizeを複写した文字列を作る
  • strとindexとsize ‐ strの、indexから始まり長さsizeを複写した文字列を作る
  • startとend ‐ startから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つの文字列を交換する
用語の所属
C++
標準C++ライブラリ
std
関連する用語
STL
クラス

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club