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

每对的第二个函数与支持引用 的第一个 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 和 将一个有效状态。

示例

以下代码演示两种模式下的 getline():第一种使用默认分隔符(换行),第二种使用空格作为分隔符。 文件尾字符(键盘上的 CTRL-Z)用于控制 while 循环的终止。 此值将 的内部状态标志设置为 ,必须在第二个 while 循环正常工作之前使用 cin eofbit 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 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

将字符序列转换为整数。

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
要使用的号码基。

备注

函数 stoistr 中的字符序列转换为 类型的值 int 并返回值。 例如,在传递字符序列“10”时,stoi 返回的值为整数 10.

stoi 当以 的方式调用单字节字符时,其行为类似于 ,其中 是函数内部的对象;对于宽字符,当以类似方式调用它时 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
要使用的号码基。

返回值

长整数的值。

备注

函数将 str 中的元素序列转换为 类型的值,就像通过调用 (其中 是函数 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 值。

备注

函数将 str 中的元素序列转换为 类型的值,就像通过调用 (其中 是函数 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 值。

备注

函数将 str 中的元素序列转换为 类型的值,就像通过调用 (其中 是函数 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 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
要使用的号码基。

返回值

无符号长整数的值。

备注

函数将 str 中的元素序列转换为类型的值 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 值。

备注

函数将 str 中的元素序列转换为类型的值 unsigned long long ,就像调用一样 strtoull( str.c_str(), _Eptr, idx) ,其中, _Eptr 是函数的内部对象。 如果为 str.c_str() == *_Eptr ,则它将引发类型的对象 invalid_argument 。 如果此类调用将设置 errno,它将引发 out_of_range 类型的对象。 否则,如果 idx 不是空指针,则该函数将存储 *_Eptr - str.c_str() 在中 *idx 并返回值。

swap

交换两个字符串的字符数组。

template <class Traits, class Allocator>
void swap(basic_string<CharType, Traits, Allocator>& left, basic_string<CharType, Traits, Allocator>& right);

参数

left
一个字符串,其元素将与另一个字符串的元素交换。

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 的类型为 floatdouble

  • "%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 的类型为 floatdouble

  • L"%Lf" 如果 value 的类型为 long double

该函数返回 wstring(Buf)

请参阅

<string>