Поделиться через


<string>Функции

Заголовок <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')).

Вторая функция каждой пары является аналогом первой для поддержки 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. Это значение задает для внутреннего флага cineofbitсостояния, который должен быть очищен до 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 не является пустым указателем, функция сохраняет *_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 не является пустым указателем, функция сохраняет *_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
Используемое числовое основание.

Замечания

Функция stoi преобразует последовательность символов в str в значение типа 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 не является пустым указателем, функция сохраняет *_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 не является пустым указателем, функция сохраняет *_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 типа 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).

См. также

<string>