Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> STL: как окончить ввод, в данном примере 
V
    Опции темы
Rickert
Дата 16.6.2007, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 0
Всего: 52



Учу по-немногу stl.
Рассматривал пример:
Код

//=============================================================================

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

//=============================================================================

using namespace std;

//=============================================================================

int main(int argc, char** argv)
{
  vector<string> buf;

  copy(istream_iterator<string>(cin), istream_iterator<string>(), back_inserter(buf));
  sort(buf.begin(), buf.end());
  unique_copy(buf.begin(), buf.end(), ostream_iterator<string>(cout, "\n"));

  return 0;
}

//=============================================================================


И встал такой вопрос: а как ограничить ввод? Допустим до символа $ или конца строки.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
archimed7592
Дата 16.6.2007, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(Rickert @  16.6.2007,  09:49 Найти цитируемый пост)
И встал такой вопрос: а как ограничить ввод?

В общем случае - никак т.к. string считывается до первого пробельного символа, будь то пробле или табуляция или конец строки или ещё что-то...

Если нужно считывать строки, разделённые определённым символом и оканчивающиеся другим определённым символом, то можно написать свой итератор, который будет делать то, что тебе нужно и использовать его можно будет так же как istream_iterator...


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Rickert
Дата 16.6.2007, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 0
Всего: 52



archimed7592, ну допустим, если пару раз нажать ctrl+z и enter - то программа завершиться. Т.е. завершиться ввод.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Xenon
Дата 16.6.2007, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



Rickert, ctrl+z это указание об окончании потока. А вот чтобы свой какой-то символ использовать - нужно писать свой итератор.


--------------------
user posted image  
PM MAIL   Вверх
Rickert
Дата 16.6.2007, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 0
Всего: 52



Xenon, а почему тогда ctrl+z срабатывает при каждом запуске в разном кол-ве? То один раз надо, то 5.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Xenon
Дата 16.6.2007, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



Rickert, почему это? Сначала жмешь enter, затем ctrl+z, затем еще раз enter - вот и завершился ввод smile


--------------------
user posted image  
PM MAIL   Вверх
Rickert
Дата 17.6.2007, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 0
Всего: 52



Твоя правда smile 


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Feniksa
Дата 17.6.2007, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 12.6.2007

Репутация: нет
Всего: нет



Сама функция copy в STL обьявленна вот так:

Код

template <class In, class Out> Out copy (In first, In last, Out res)
{
      while(first != last) *res++=*first++;
      return res;
}


Мы можем просто написать свой copy, который будет прекращать копировать в случае нахождения в последовательности какого то символа.  Если не получиться у тебя, маякни, помогу реализовать (хотя оставлю в качестве домашнего задания). Желаю удачи!!!  smile 
PM MAIL   Вверх
Xenon
Дата 17.6.2007, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



Можно тогда написать:
Код

template <typename PRED, typename InIter, typename OutIter> void copy_if(InIter FIRST, InIter LAST, OutIter OUT, PRED Cond)
{
    for ( ; FIRST != LAST; ++FIRST)
        if ( Cond(*FIRST) ) OUT = *FIRST;
}

И предикат, но по-моему это не лучший выход.


--------------------
user posted image  
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0565 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.