Как решить, что такое строка в нашем документе? Есть три очевидные альтернативы.
1. Полагаться на индикаторы новых строк (например, '\n') в строке ввода.
2. Каким-то образом разделить документ и использовать обычную пунктуацию (например, . ).
3. Разделить строку, длина которой превышает некий порог (например, 50 символов), на две.
Также возможно вы думаете, что такая тема как http://sb-master.ru/?page_id=336 никак не связана и даже не тематична с программированием.
Возможно, это и так, но все-таки зайдите на сайт sb-master.ru - там можно узнать много интересного про то, где есть изготовление лестниц ХМАО. Что означает изготовление лестниц ХМАО, за сколько денег возможно изготовление лестниц ХМАО - про это написано на сайте sb-master.ru. Это важная для многих тема - изготовление лестниц ХМАО. Спасибо сайту за информацию про то, где есть изготовление лестниц ХМАО
Кроме этого, несомненно, существуют менее очевидные варианты. Для простоты выберем первую альтернативу.
Представим документ в нашем редакторе в виде объекта класса Document. Схематически наш тип должен выглядеть примерно так:
typedef vector Line; // строка — это вектор символов
struct Document {
list line; // документ — список строк
Document() { line.push_back(Line()); }
};
Каждый объект класса Document начинается с пустой строки: конструктор класса Document сначала создает пустую строку, а затем заполняет список строка за строкой.
Чтение и разделение на строки можно выполнить следующим образом: istream& operator>>(istream& is, Document& d)
{
char ch;
while (is.get(ch)) {
d.line.back().push_back(ch); // добавляем символ
if (ch=='\n')
d.line.push_back(Line()); // добавляем новую строку
}
if (d.line.back().size())
d.line.push_back(Line()); // добавляем пустую строку return is;
}
Классы vector и list имеют функцию-член back(), возвращающую ссылку на последний элемент. Для ее использования вы должны быть уверены, что она действительно ссылается на последний элемент, — функцию back() нельзя применять к пустому контейнеру. Вот почему в соответствии с определением каждый объект класса Document должен содержать пустой объект класса Line. Обратите внимание на то, что мы храним каждый введенный символ, даже символы перехода на новую строку ('\n'). Хранение символов перехода на новую строку сильно упрощает дело, но при подсчете символов следует быть осторожным (простой подсчет символов будет учитывать пробелы и символы перехода на новую строку).
Опубликовал katy
April 22 2015 21:13:10 ·
0 Комментариев ·
3596 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.