Класс string

Считывание можно производить как в C-строки, так и в объекты класса string. Мы рекомендуем пользоваться последними. Их главное преимущество – автоматическое управление памятью для хранения символов. Чтобы прочитать данные в C-строку, т.е. массив символов, необходимо сначала задать его размер, достаточный для хранения строки. Обычно мы читаем символы в буфер, затем выделяем из хипа ровно столько памяти, сколько нужно для хранения прочитанной строки, и копируем данные из буфера в эту память:

#include < iostream>

#include < string.h>

char inBuf[ 1024 ];

try

{

while (cin >> inBuf) {

char *str = new char[ strlen(inBuf) + 1 ];

strcpy(str, inBuf);

//... сделать что-то с массивом символов str

delete [] str;

}

}

catch(...) { delete [] str; throw; }

Работать с типом string значительно проще:

#include < iostream>

#include < string.h>

string str;

while (cin > str)

//... сделать что-то со строкой

При использовании класса string все проблемы управления памятью исчезают, об этом заботится сам string. Вот как выглядит программа поиска слова с максимальной длинной:

#include <iostream.h>

#include <string>

int main()

{

string buf, largest;

// для хранения статистики

int curLen, // длина текущего слова

max = -1, // максимальная длина слова

cnt = 0; // счетчик прочитанных слов

while (cin > >buf)

{

curLen = buf.size();

++cnt;

// новое самое длинное слово? сохраним его

if (curLen > max)

{

max = curLen;

largest = buf;

}

}

cout < "Число прочитанных слов " << cnt << endl;

cout << "Длина самого длинного слова " << max << endl;

cout << "Самое длинное слово " << largest << endl;

}

Однако запятая и кавычка по-прежнему считаются частью слова. Напишем функцию для удаления этих символов из слова:

#include <string>

void filter_string(string &str)

{

// элементы, подлежащие фильтрации

string filt_elems("\",?.");

string::size_type pos = 0;

while ((pos = str.find_first_of(filt_elems, pos))

!= string::npos)

str.erase(pos, 1);

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: