<string>
関数
getline
stod
stof
stoi
stol
stold
stoll
stoul
stoull
swap
to_string
to_wstring
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
の値です。
解説
この関数は、strtod( str.c_str(), _Eptr)
を呼び出したときと同じように、str
内の要素のシーケンスを型 double
の値に変換します。ここで、_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
の値です。
解説
この関数は、strtof( str.c_str(), _Eptr)
を呼び出したときと同じように、str
内の要素のシーケンスを型 float
の値に変換します。ここで、_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( str.c_str(), _Eptr, idx)
の形式 (_Eptr
は関数内部のオブジェクト) で呼びしたときの strtol
と、ワイド文字に対しては、同様の wcstol(Str.c_str(), _Eptr, idx)
の形式で呼び出したときの wcstol
と同様に動作します。 詳細については、「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
使用する基数。
戻り値
長整数値。
解説
この関数は、strtol( str.c_str(), _Eptr, idx)
を呼び出したときと同じように、str 内の要素のシーケンスを型 long
の値に変換します。ここで、_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
の値です。
解説
この関数は、strtold( str.c_str(), _Eptr)
を呼び出したときと同じように、str 内の要素のシーケンスを型 long double
の値に変換します。ここで、_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
の値です。
解説
この関数は、strtoll( str.c_str(), _Eptr, idx)
を呼び出したときと同じように、str 内の要素のシーケンスを型 long long
の値に変換します。ここで、_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 整数値。
解説
この関数は、strtoul( str.c_str(), _Eptr, idx)
を呼び出したときと同じように、str 内の要素のシーケンスを型 unsigned long
の値に変換します。ここで、_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
の値です。
解説
この関数は、strtoull( str.c_str(), _Eptr, idx)
を呼び出したときと同じように、str 内の要素のシーケンスを型 unsigned long long
の値に変換します。ここで、_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
値。
解説
この関数は sprintf(Buf, Fmt, value)
を呼び出したときと同じように、value を関数内部の配列オブジェクト Buf
に格納された要素のシーケンスに変換します。ここで、Fmt
は次のとおりです。
value
が型int
である場合"%d"
value
が型unsigned int
である場合"%u"
value
が型long
である場合"%ld"
value
が型unsigned long
である場合"%lu"
value
が型long long
である場合"%lld"
value
が型unsigned long long
である場合"%llu"
value
が型float
またはdouble
である場合"%f"
value
が型long double
である場合"%Lf"
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
は
value
が型int
である場合L"%d"
value
が型unsigned int
である場合L"%u"
value
が型long
である場合L"%ld"
value
が型unsigned long
である場合L"%lu"
value
が型long long
である場合L"%lld"
value
が型unsigned long long
である場合L"%llu"
value
が型float
またはdouble
である場合L"%f"
value
が型long double
である場合L"%Lf"
wstring(Buf)
が返されます。