<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_streamios_base::failbit に設定されます。 いずれの場合も、getlinein_stream を返します。

例外がスローされた場合、in_streamstr は引き続き有効な状態になります。

次のコードは、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 と同様に動作します。 詳細については、「strtolwcstol_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) が返されます。

関連項目

<string>