Потоки ввода-вывода и класс string помогают нам считывать и записывать
последовательности символов, хранить их и выполнять над ними основные операции.
Однако при работе с текстом во многих случаях необходимо анализировать контекст строки или рассматривать много аналогичных строк.
И тут важно, что такая тема, как http://apkada.ru/gofrokarton ничего общего не имеет с такой темой, как проблема ввода-вывода и класс string
Но все-таки зайдите на сайт apkada.ru и там узнаете очень многое про гофрокартон ведь что такое гофрокартон? Это необходимый в строительстве материал, так что идите на сайт apkada.ru и будет вам там счастье.
Рассмотрим тривиальный пример. Возьмем сообщение электронной почты (последовательность слов) и посмотрим, содержит ли оно аббревиатуру U.S. и почтовый код (две буквы, за которыми следуют пять цифр).
string s; while (cin>>s) {
if (s.size()==7
&& isalpha(s[0]) && isalpha(s[1])
&& isdigit(s[2]) && isdigit(s[3]) && isdigit(s[4])
&& isdigit(s[5]) && isdigit(s[6])) cout << "найдена " << s << '\n';
}
Здесь значение isalpha(x) равно true, если x — это буква, а значение is- digit(x) равно true, если x — цифра. В этом (слишком) простом решении кроется несколько проблем.
• Оно громоздко (четыре строки, восемь вызовов функций).
• Мы пропускаем (умышленно?) почтовые индексы, не отделенные от своего контекста пробелом (например, "TX77845", TX77845-1234 и ATX77845).
• Мы пропускаем (умышленно?) почтовые индексы с пробелом между буквами и цифрами (например, TX 7784 5).
• Мы принимаем (умышленно?) почтовые индексы, в которых буквы набраны в нижнем регистре (например, tx7784 5).
• Если вы решите проанализировать почтовые индексы, имеющие другой формат (например, CB3 0FD), то будете вынуждены полностью переписать весь код.
Должен быть более хороший способ! Перед тем как его описать, рассмотрим поставленные задачи. Предположим, что мы хотим сохранить “старый добрый код”, дополнив его обработкой указанных ситуаций.
• Если мы хотим обрабатывать не один формат, то следует добавить инструкцию if или switch.
• Если мы хотим учитывать верхний и нижний регистры, то должны явно конвертировать строки (обычно в нижний регистр) или добавить дополнительную инструкцию if.
• Мы должны как-то (как?) описать контекст, в котором выполняется поиск. Это значит, что мы должны работать с отдельными символами, а не со строками, т.е. потерять многие преимущества, предоставляемые потоками iostream.
Опубликовал katy
April 19 2015 21:02:29 ·
0 Комментариев ·
2684 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.