Читайте также:
|
|
Библиотека iostream поддерживает операции над строковыми объектами в памяти. Класс ostringstream вставляет символы в строку, istringstream читает символы из строкового объекта, а stringstream может использоваться как для чтения, так и для записи. Чтобы работать со строковым потоком, в программу необходимо включить заголовочный файл
#include <sstream>
Например, следующая функция читает весь файл alice_emma в объект buf класса ostringstream. Размер buf увеличивается по мере необходимости, чтобы вместить все символы: #include <string> #include <fstream> #include <sstream> string read_file_into_string() { ifstream ifile("alice_emma"); ostringstream buf; char ch; while (buf && ifile.get(ch)) buf.put(ch); return buf.str(); }
Функция-член str() возвращает строку – объект класса string, ассоциированный со строковым потоком ostringstream. Этой строкой можно манипулировать так же, как и “обычным” объектом класса string. Например, в следующей программе text почленно инициализируется строкой, ассоциированной с buf:
int main(){ string text = read_file_into_string(); // запомнить позиции каждого символа новой строки vector< string::size_type > lines_of_text; string::size_type pos = 0; while (pos!= string::npos) { pos = text.find('\n' pos); lines_of_text.push_back(pos); } //...}Объект класса ostringstream можно использовать для автоматического форматирования составной строки, т.е. строки, составленной из данных разных типов. Так, следующий оператор вывода автоматически преобразует любой арифметический тип в соответствующее строковое представление, поэтому заботиться о выделении нужного количества памяти нет необходимости:
#include <iostream>#include <sstream> int main(){ int ival = 1024; int *pival = &ival; double dval = 3.14159; double *pdval = &dval; ostringstream format_message; // преобразование значений в строковое представление format_message << "ival: " << ival <<" адрес ival: " << pival << 'n' << "dval: " << dval << " адрес dval: " << pdval << endl; string msg = format_message.str(); cout << " размер строки сообщения: " << msg.size() <<" сообщение:"<<msg <<endl;}Иногда лучше собрать все диагностические сообщения об ошибках, а не выводить их по мере возникновения. Это легко сделать с помощью перегруженного множества функций форматирования:
Приложение может сохранить такие строки для последующего отображения и даже рассортировать их по серьезности. Обобщить эту идею помогают классы Notify (извещение), Log (протокол) и Error (ошибка).
Поток istringstream читает из объекта класса string, с помощью которого был сконструирован. В частности, он применяется для преобразования строкового представления числа в его арифметическое значение:
Дата добавления: 2015-09-03; просмотров: 95 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Самое длинное слово beautiful | | | Состояние формата (ОТНОСИТСЯ К ПОСЛЕДНЕМУ ВОПРОСУ, КОТОРЫЙ 24) |