basic_stringテンプレートクラスを特殊化した型で、次のように宣言されています。
typedef basic_string<char> string;
これを利用すると、次のように文字列を扱えます。
std::string str = "文字列";
basic_string( const value_type* _Ptr );
basic_string( const value_type* _Ptr, const allocator_type& _Al );
std::string s1; // "" std::string s2 = ""; // "" std::string s3 = "ABC"; // "ABC" std::string s4("ABC"); // "ABC" std::string s5(3, 'A'); // "AAA" std::string s6 = s5; // "AAA"
文字列の長さはsize()で取得できます。
size_type size( ) const;basic_string::size | MSDN
同様の関数にlength()がありますが、これはsize()の値を返すだけで機能は同じです。
size_type length( ) const;basic_string::length | MSDN
basic_string<CharType, Traits, Allocator>& insert( size_type _P0, const value_type* _Ptr );basic_string::insert | MSDN
std::string s = "AAA"; s.insert(1, "X"); // "AXAA" s.insert(1, "Y"); // "AYXAA"
size_type find( value_type _Ch, size_type _Off = 0 ) const;
size_type find( const value_type* _Ptr, size_type _Off = 0 ) const;basic_string::find | MSDN
std::string s = "ABC ABC"; size_t p1 = s.find('C'); // 2 size_t p2 = s.find("BC"); // 1 size_t p3 = s.find("BC", 2); // 5 size_t p4 = s.find("Z"); // string::npos (-1 : 4294967295 = 2^32-1)
std::string s = "AB ABC"; size_t p1 = s.find_first_of('B'); // 1 size_t p2 = s.find_first_of("B"); // 1 size_t p3 = s.find_first_of("BC"); // 1 size_t p4 = s.find_last_of('C'); // 5 size_t p5 = s.find_first_not_of("AB"); // 2
basic_string<CharType, Traits, Allocator>& replace( size_type _Pos1, size_type _Num1, const value_type* _Ptr );basic_string::replace | MSDN
_Pos1の位置から_Num1文字削除し、そこに_Ptrの文字列を挿入します。
std::string s = "AAAA"; s.replace(1, 2, "BBB"); // "ABBBA" s.replace(2, 0, "C"); // "ABCBBA"
ある文字列を指定の文字列に置換するならば、find()で位置を検索し、そこからsize()の文字数を削除し、そこに指定文字列を挿入します。
std::string s = "ABC ABC";
std::string from = "BC";
std::string to = "X";
s.replace(s.find(from), from.size(), to); // "AX ABC"
void clear( );basic_string::clear | MSDN
iterator erase( iterator _First, // 削除する最初の要素の反復子 iterator _Last // 削除する最後の要素の1つ前の反復子 );
iterator erase(
iterator _It // 削除する要素の反復子 (指定の1文字だけ削除)
);
basic_string<CharType, Traits, Allocator>& erase( size_type _Pos = 0, // 削除を開始する位置 size_type _Count = npos // 削除する文字数 );basic_string::erase | MSDN
const value_type *c_str( ) const;basic_string::c_str - basic_string Class | Microsoft Learn
c_str()はNULLで終端された文字列のポインタを返します。
const value_type *data( ) const;basic_string::data - basic_string Class | Microsoft Learn
一方でdata()はNULLで終端されていない、文字が格納された配列のアドレスを返します。
std::string s = "ABC"; const char* p = s.c_str(); const char* a = s.data();
stringstreamを介すことで、文字列以外からstringを得られます。stringstream - <sstream> typedefs | Microsoft Learn
std::stringstream stream;
stream << 5.0 / 3.0;
std::string s = stream.str(); // "1.66667"
const char *c = s.c_str();
このときconst char*を得たいだけだとしても、stream.str().c_str()
とはしないようにします。str()の戻り値は一時オブジェクト (temporary object) のため、それのポインタを得たとしても式を抜けたときに破棄されています。c++ - stringstream, string, and char* conversion confusion - Stack Overflow
簡単には、to_string()でも可能です。to_string - <string> 関数 | Microsoft Learn
double d = 1.0;
std::string s = std::to_string(d); // "1.000000"
int stoi( const string& str, size_t* idx = 0, int base = 10);stoi - <string> functions | Microsoft Learn
double stod( const string& str, size_t* idx = 0);stod - <string> functions | Microsoft Learn
std::string s1 = "1.23ABC"; double x1 = std::stod(s1); // 1.2300000000000000 double x2 = std::stod("a"); // std::invalid_argument