<string>
ヘッダーには、次の関数が用意されています。
getline
入力ストリームから文字列を行単位で抽出します。
// (1) delimiter as parameter
template <class CharType, class Traits, class Allocator>
basic_istream<CharType, Traits>& getline(
basic_istream<CharType, Traits>& in_stream,
basic_string<CharType, Traits, Allocator>& str,
CharType delimiter);
template <class CharType, class Traits, class Allocator>
basic_istream<CharType, Traits>& getline(
basic_istream<CharType, Traits>&& in_stream,
basic_string<CharType, Traits, Allocator>& str,
const CharType delimiter);
// (2) default delimiter used
template <class CharType, class Traits, class Allocator>
basic_istream<CharType, Traits>& getline(
basic_istream<CharType, Traits>& in_stream,
basic_string<CharType, Traits, Allocator>& str);
template <class Allocator, class Traits, class Allocator>
basic_istream<Allocator, Traits>& getline(
basic_istream<Allocator, Traits>&& in_stream,
basic_string<Allocator, Traits, Allocator>& str);
パラメーター
in_stream
文字列の抽出元となる入力ストリーム。
str
入力ストリームから抽出した文字の読み込み先となる文字列。
delimiter
行の区切り記号。
戻り値
入力ストリーム in_stream
。
解説
(1)
としてマークされた関数シグネチャのペアが、in_stream
が検出されるまで delimiter
から文字を抽出し、それらを str
に格納します。
(2)
としてマークされた関数シグネチャのペアが、既定の行区切り文字として改行文字を使用し、getline(in_stream, str, in_stream. widen('\n'))
として動作します。
各ペアの 2 つめの関数は、1 つめの関数と同様に、rvalue
参照をサポートします。
抽出は、次のいずれかが発生したときに停止します。
ファイルの末尾に達したとき。この場合、
in_stream
の内部状態フラグはios_base::eofbit
に設定されます。関数が
delimiter
と等しい要素を抽出した後。 要素が、被制御シーケンスに戻されたり、追加されたりすることはありません。関数が
str.max_size
要素を抽出した後。in_stream
の内部状態フラグはios_base::failbit
に設定されます。上記に含まれていないその他のエラーが発生したとき。この場合、
in_stream
の内部状態フラグはios_base::badbit
に設定されます。
内部状態フラグについては、「ios_base::iostate
」を参照してください。
関数が要素を抽出しなかった場合、内部状態フラグ in_stream
は ios_base::failbit
に設定されます。 いずれの場合も、getline
は in_stream
を返します。
例外がスローされた場合、in_stream
と str
は引き続き有効な状態になります。
例
次のコードは、2 つのモードの getline()
を示しています。1 つ目は既定の区切り文字 (改行文字)、2 つ目は区切り文字として空白文字を使用しています。 また、while ループの終了を制御するために、ファイル終端文字 (Ctrl + Z キー) を使用しています。 この値により、cin
の内部状態フラグが eofbit
に設定されます。これは、2 つめの while ループを正常に動作させるために、basic_ios::clear()
でクリアする必要があります。
// compile with: /EHsc /W4
#include <string>
#include <iostream>
#include <vector>
using namespace std;
int main()
{
string str;
vector<string> v1;
cout << "Enter a sentence, press ENTER between sentences. (Ctrl-Z to stop): " << endl;
// Loop until end-of-file (Ctrl-Z) is input, store each sentence in a vector.
// Default delimiter is the newline character.
while (getline(cin, str)) {
v1.push_back(str);
}
cout << "The following input was stored with newline delimiter:" << endl;
for (const auto& p : v1) {
cout << p << endl;
}
cin.clear();
vector<string> v2;
// Now try it with a whitespace delimiter
while (getline(cin, str, ' ')) {
v2.push_back(str);
}
cout << "The following input was stored with whitespace as delimiter:" << endl;
for (const auto& p : v2) {
cout << p << endl;
}
}
stod
文字シーケンスを double
に変換します。
double stod(
const string& str,
size_t* idx = 0);
double stod(
const wstring& str,
size_t* idx = 0);
パラメーター
str
変換する文字シーケンス。
idx
最初の未変換文字のインデックス値。
戻り値
double
の値です。
解説
この関数は、str
を呼び出したときと同じように、double
内の要素のシーケンスを型 strtod( str.c_str(), _Eptr)
の値に変換します。ここで、_Eptr
は関数内部のオブジェクトです。
str.c_str() == *_Eptr
の場合、型 invalid_argument
のオブジェクトをスローします。 このような呼び出しによって errno
が設定される場合、out_of_range
型のオブジェクトをスローします。 それ以外で、idx
が null ポインターではない場合、この関数は *_Eptr - str.c_str()
を *idx
に格納し、その値を返します。
stof
文字シーケンスを float に変換します。
float stof(
const string& str,
size_t* idx = 0);
float stof(
const wstring& str,
size_t* idx = 0);
パラメーター
str
変換する文字シーケンス。
idx
最初の未変換文字のインデックス値。
戻り値
float
の値です。
解説
この関数は、str
を呼び出したときと同じように、float
内の要素のシーケンスを型 strtof( str.c_str(), _Eptr)
の値に変換します。ここで、_Eptr
は関数内部のオブジェクトです。
str.c_str() == *_Eptr
の場合、型 invalid_argument
のオブジェクトをスローします。 このような呼び出しによって errno
が設定される場合、out_of_range
型のオブジェクトをスローします。 それ以外で、idx
が null ポインターではない場合、この関数は *_Eptr - str.c_str()
を *idx
に格納し、その値を返します。
stoi
文字シーケンスを integer に変換します。
int stoi(
const string& str,
size_t* idx = 0,
int base = 10);
int stoi(
const wstring& str,
size_t* idx = 0,
int base = 10);
戻り値
整数値。
パラメーター
str
変換する文字シーケンス。
idx
最初の未変換文字のインデックス値。
base
使用する基数。
解説
関数 stoi
は、str 内の文字のシーケンスを型 int
の値に変換し、その値を返します。 たとえば、文字シーケンス "10" を渡した場合、stoi
によって返される値は整数 10 です。
stoi
は、1 バイト文字に対しては、strtol
の形式 (strtol( str.c_str(), _Eptr, idx)
は関数内部のオブジェクト) で呼びしたときの _Eptr
と、ワイド文字に対しては、同様の wcstol
の形式で呼び出したときの wcstol(Str.c_str(), _Eptr, idx)
と同様に動作します。 詳細については、「strtol
、wcstol
、_strtol_l
、_wcstol_l
」を参照してください。
str.c_str() == *_Eptr
の場合、stoi
は型 invalid_argument
のオブジェクトをスローします。 このような呼び出しによって errno
が設定されるか、戻り値を型 int
のオブジェクトとして表すことができない場合、型 out_of_range
のオブジェクトがスローされます。 それ以外で、idx が null ポインターではない場合、この関数は *_Eptr - str.c_str()
を *idx
に格納します。
stol
文字シーケンスを long
に変換します。
long stol(
const string& str,
size_t* idx = 0,
int base = 10);
long stol(
const wstring& str,
size_t* idx = 0,
int base = 10);
パラメーター
str
変換する文字シーケンス。
idx
最初の未変換文字のインデックス値。
base
使用する基数。
戻り値
長整数値。
解説
この関数は、 を呼び出したときと同じように、long
内の要素のシーケンスを型 strtol( str.c_str(), _Eptr, idx)
の値に変換します。ここで、_Eptr
は関数内部のオブジェクトです。
str.c_str() == *_Eptr
の場合、型 invalid_argument
のオブジェクトをスローします。 このような呼び出しによって errno
が設定される場合、out_of_range
型のオブジェクトをスローします。 それ以外で、idx
が null ポインターではない場合、この関数は *_Eptr - str.c_str()
を *idx
に格納し、その値を返します。
stold
文字シーケンスを long double
に変換します。
double stold(
const string& str,
size_t* idx = 0);
double stold(
const wstring& str,
size_t* idx = 0);
パラメーター
str
変換する文字シーケンス。
idx
最初の未変換文字のインデックス値。
戻り値
long double
の値です。
解説
この関数は、 を呼び出したときと同じように、long double
内の要素のシーケンスを型 strtold( str.c_str(), _Eptr)
の値に変換します。ここで、_Eptr
は関数内部のオブジェクトです。
str.c_str() == *_Eptr
の場合、型 invalid_argument
のオブジェクトをスローします。 このような呼び出しによって errno
が設定される場合、out_of_range
型のオブジェクトをスローします。 それ以外で、idx
が null ポインターではない場合、この関数は *_Eptr - str.c_str()
を *idx
に格納し、その値を返します。
stoll
文字シーケンスを long long
に変換します。
long long stoll(
const string& str,
size_t* idx = 0,
int base = 10);
long long stoll(
const wstring& str,
size_t* idx = 0,
int base = 10);
パラメーター
str
変換する文字シーケンス。
idx
最初の未変換文字のインデックス値。
base
使用する基数。
戻り値
long long
の値です。
解説
この関数は、 を呼び出したときと同じように、long long
内の要素のシーケンスを型 strtoll( str.c_str(), _Eptr, idx)
の値に変換します。ここで、_Eptr
は関数内部のオブジェクトです。
str.c_str() == *_Eptr
の場合、型 invalid_argument
のオブジェクトをスローします。 このような呼び出しによって errno
が設定される場合、out_of_range
型のオブジェクトをスローします。 それ以外で、idx が null ポインターではない場合、この関数は *_Eptr - str.c_str()
を *idx
に格納し、その値を返します。
stoul
文字シーケンスを unsigned long に変換します。
unsigned long stoul(
const string& str,
size_t* idx = 0,
int base = 10);
unsigned long stoul(
const wstring& str,
size_t* idx = 0,
int base = 10);
パラメーター
str
変換する文字シーケンス。
idx
最初の未変換文字のインデックス値。
base
使用する基数。
戻り値
unsigned long 整数値。
解説
この関数は、 を呼び出したときと同じように、unsigned long
内の要素のシーケンスを型 strtoul( str.c_str(), _Eptr, idx)
の値に変換します。ここで、_Eptr
は関数内部のオブジェクトです。
str.c_str() == *_Eptr
の場合、型 invalid_argument
のオブジェクトをスローします。 このような呼び出しによって errno
が設定される場合、out_of_range
型のオブジェクトをスローします。 それ以外で、idx が null ポインターではない場合、この関数は *_Eptr - str.c_str()
を *idx
に格納し、その値を返します。
stoull
文字シーケンスを unsigned long long
に変換します。
unsigned long long stoull(
const string& str,
size_t* idx = 0,
int base = 10);
unsigned long long stoull(
const wstring& str,
size_t* idx = 0,
int base = 10);
パラメーター
str
変換する文字シーケンス。
idx
最初の未変換文字のインデックス値。
base
使用する基数。
戻り値
unsigned long long
の値です。
解説
この関数は、 を呼び出したときと同じように、unsigned long long
内の要素のシーケンスを型 strtoull( str.c_str(), _Eptr, idx)
の値に変換します。ここで、_Eptr
は関数内部のオブジェクトです。
str.c_str() == *_Eptr
の場合、型 invalid_argument
のオブジェクトをスローします。 このような呼び出しによって errno
が設定される場合、out_of_range
型のオブジェクトをスローします。 それ以外で、idx
が null ポインターではない場合、この関数は *_Eptr - str.c_str()
を *idx
に格納し、その値を返します。
swap
2 つの文字列の、文字の配列を交換します。
template <class Traits, class Allocator>
void swap(basic_string<CharType, Traits, Allocator>& left, basic_string<CharType, Traits, Allocator>& right);
パラメーター
left
別の文字列と要素を交換する 1 つの文字列。
right
最初の文字列と要素を交換するもう一方の文字列。
解説
このテンプレート関数は、文字列に対して定数計算量を保証する特殊化されたメンバー関数 left.swap
(right
) を実行します。
例
// string_swap.cpp
// compile with: /EHsc
#include <string>
#include <iostream>
int main( )
{
using namespace std;
// Declaring an object of type basic_string<char>
string s1 ( "Tweedledee" );
string s2 ( "Tweedledum" );
cout << "Before swapping string s1 and s2:" << endl;
cout << "The basic_string s1 = " << s1 << "." << endl;
cout << "The basic_string s2 = " << s2 << "." << endl;
swap ( s1 , s2 );
cout << "\nAfter swapping string s1 and s2:" << endl;
cout << "The basic_string s1 = " << s1 << "." << endl;
cout << "The basic_string s2 = " << s2 << "." << endl;
}
Before swapping string s1 and s2:
The basic_string s1 = Tweedledee.
The basic_string s2 = Tweedledum.
After swapping string s1 and s2:
The basic_string s1 = Tweedledum.
The basic_string s2 = Tweedledee.
to_string
値を string
に変換します。
string to_string(int value);
string to_string(unsigned int value);
string to_string(long value);
string to_string(unsigned long value);
string to_string(long long value);
string to_string(unsigned long long value);
string to_string(float value);
string to_string(double value);
string to_string(long double value);
パラメーター
value
変換する値。
戻り値
値を表す string
値。
解説
この関数は を呼び出したときと同じように、Buf
を関数内部の配列オブジェクト sprintf(Buf, Fmt, value)
に格納された要素のシーケンスに変換します。ここで、Fmt
は次のとおりです。
"%d"
が型value
である場合int
"%u"
が型value
である場合unsigned int
"%ld"
が型value
である場合long
"%lu"
が型value
である場合unsigned long
"%lld"
が型value
である場合long long
"%llu"
が型value
である場合unsigned long long
"%f"
が型value
またはfloat
である場合double
"%Lf"
が型value
である場合long double
string(Buf)
が返されます。
to_wstring
値をワイド文字列に変換します。
wstring to_wstring(int value);
wstring to_wstring(unsigned int value);
wstring to_wstring(long value);
wstring to_wstring(unsigned long value);
wstring to_wstring(long long value);
wstring to_wstring(unsigned long long value);
wstring to_wstring(float value);
wstring to_wstring(double value);
wstring to_wstring(long double value);
パラメーター
value
変換する値。
戻り値
値を表すワイド文字列。
解説
関数は value
を呼び出すように、Buf
を関数内部の配列オブジェクト swprintf(Buf, Len, Fmt, value)
に格納された要素シーケンスに変換します。ここで、Fmt
は
L"%d"
が型value
である場合int
L"%u"
が型value
である場合unsigned int
L"%ld"
が型value
である場合long
L"%lu"
が型value
である場合unsigned long
L"%lld"
が型value
である場合long long
L"%llu"
が型value
である場合unsigned long long
L"%f"
が型value
またはfloat
である場合double
L"%Lf"
が型value
である場合long double
wstring(Buf)
が返されます。