Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
#1

Функция ввода вместо cin - C++

04.08.2013, 05:28. Просмотров 661. Ответов 10
Метки нет (Все метки)

Здорова!

Нужно написать функцию ввода вместо cin, которая бы читала строки.
Я не знаю чем можно заменить cin. Нужно постараться сделать так что бы по быстродействию функция читала строки быстрее чем cin (строки определенной длинны 15-20 символов). Как это сделать?

И вообще чем можно заменить cin?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.08.2013, 06:01     Функция ввода вместо cin #2
Что-то наподобие getc(), getchar().
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
04.08.2013, 06:04  [ТС]     Функция ввода вместо cin #3
alsav22, Да это не то, а мб и то хз, нужно короче задачку решить: "Представьте, что считывание строк средней длинны (от 5 до 25 символов) из потока cin — самое узкое место в вашей системе. Напишите функцию ввода, читающей такие строки с максимально возможной скоростью. Допустимо организовать интерфейс функции в угоду быстродействию (даже за счет некоторого неудобства в использовании). Сравните результат с реализацией операции >> для типа string."

И куда тут get() приписать? get() она ж один символ из потока считывает, а мне как ее тут наверно нужно типо для строк сделать что мне нужно свою функцию написать myget() которая будет возвращать не символ а строку?
alsav22, Дружище помоги последняя задачка осталась из главы!

Добавлено через 2 минуты
Я вообще условие сразу не правильно понял, не вместо cin, а просто функцию которая б считывала из cin строки максимально быстро.
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.08.2013, 06:19     Функция ввода вместо cin #4
Как-то так можно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void mycin(char *buff)
{
    int i = 0;
    while (buff[i] = getc(stdin))
    {
        if (buff[i] == '\n')
        {
            buff[i] = '\0'; 
            return;
        }
        ++i;
    }
}
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
04.08.2013, 06:33  [ТС]     Функция ввода вместо cin #5
alsav22, а почему она void возвращает мб она должна быть такой string myget(){считываем из cin символы с помощью get() и добавляем в строку; return строка} ????
Мб стоит попроще написать???

Добавлено через 1 минуту
alsav22, а я понял через указатель получаем результат, ну ок мб и так.
Молодец!
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.08.2013, 06:49     Функция ввода вместо cin #6
Если string, можно так:
C++
1
2
3
4
5
6
7
8
9
10
11
void mycin(string &str)
{
    char ch;
    while (true)
    {
        ch = getc(stdin);
        if (ch != '\n')
            str += ch;
        else break;
    }
}
Добавлено через 2 минуты
Только как это сделать?
Цитата Сообщение от ninja2 Посмотреть сообщение
Сравните результат с реализацией операции >> для типа string.
Если только из файла...
Croessmah
Модератор
Эксперт CЭксперт С++
12891 / 7277 / 811
Регистрация: 27.09.2012
Сообщений: 17,976
Записей в блоге: 2
Завершенные тесты: 1
04.08.2013, 08:43     Функция ввода вместо cin #7
ninja2, попробуйте как-нибудь так:
C++
1
2
3
4
5
void foo ( std::string & destString ) {
    std::streamsize count = std::cin.rdbuf ( ) -> in_avail ( ) ;
    destString.resize ( count ) ;
    std::cin.rdbuf ( ) -> sgetn ( & destString [ 0 ] , count ) ;
}
Misterkat
7 / 7 / 0
Регистрация: 16.11.2012
Сообщений: 83
04.08.2013, 11:52     Функция ввода вместо cin #8
Цитата Сообщение от ninja2 Посмотреть сообщение
И вообще чем можно заменить cin?
String.h тебе в помощь.

Не по теме:

Изобретаем велосипед.

ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
04.08.2013, 12:29  [ТС]     Функция ввода вместо cin #9
Цитата Сообщение от Misterkat Посмотреть сообщение
Изобретаем велосипед.
Да велоспед, но это так в учебных целях.
Misterkat
04.08.2013, 12:37
  #10

Не по теме:

Цитата Сообщение от ninja2 Посмотреть сообщение
Да велоспед, но это так в учебных целях.
В учебных целях это полезно.
ЗЫ:Удачи.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.08.2013, 19:25     Функция ввода вместо cin
Еще ссылки по теме:

Игнорируются потоки ввода cin C++
C++ Обработка ошибок ввода из потока cin
Очистка всего буфера ввода (cin) C++
C++ Поток ввода cin и его очистка(?)
C++ Поток ввода cin

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.08.2013, 19:25     Функция ввода вместо cin #11
Как вот это сделать?
Цитата Сообщение от ninja2 Посмотреть сообщение
Сравните результат с реализацией операции >> для типа string.
Что значит "сравнить"? По скорости чтения? Тогда как?
Настораживает вот это:
Цитата Сообщение от ninja2 Посмотреть сообщение
Допустимо организовать интерфейс функции в угоду быстродействию (даже за счет некоторого неудобства в использовании)
Это намёк на что? Все предложенные варианты, интерфейс никак не меняют...
Yandex
Объявления
04.08.2013, 19:25     Функция ввода вместо cin
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru