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

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

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

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

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

Здорова!

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

И вообще чем можно заменить cin?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.08.2013, 05:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция ввода вместо cin (C++):

Какая функция объекта cin позволяет вставить символ в поток ввода? - C++
Какая функция обьекта cin позволяет вставить символ в поток ввода?Пример,если можно.

Использование cin.get вместо cin - C++
Есть задача: нужно рассчитать среднее значение входных суммирующихся чисел. Я его решил таким способом: #include <iostream> #include...

Cin вместо cin.getline - C++
#include <stdlib.h> #include <string.h> #include <fstream> using namespace std; int get_int(int default_value); char name; ...

какую библиотеку надо подключать чтоб работала функция _getch() и функция cin.get() - C++
какую библиотеку надо подключать чтоб работала функция _getch() и функция cin.get()

Защита от дурака при вводе текста с помощью: cin.get cin.clear cin.sync - C++
Доброго времени суток. На С++ учусь с недавних пор. Имеется стандартная "защита от дурака" на ввод. Не пойму предназначение cin.get() !=...

Объясните пожалуйста как работают cin.good(), cin.sync(), cin.clear() - C++
Такая проблема: сдаю в вуза лабораторные по программированию, писал все сам, до этого c++ не изучал, поэтому возникали некоторые проблемы....

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

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

Добавлено через 2 минуты
Я вообще условие сразу не правильно понял, не вместо cin, а просто функцию которая б считывала из cin строки максимально быстро.
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.08.2013, 06:19 #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;
    }
}
1
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
04.08.2013, 06:33  [ТС] #5
alsav22, а почему она void возвращает мб она должна быть такой string myget(){считываем из cin символы с помощью get() и добавляем в строку; return строка} ????
Мб стоит попроще написать???

Добавлено через 1 минуту
alsav22, а я понял через указатель получаем результат, ну ок мб и так.
Молодец!
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.08.2013, 06:49 #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.
Если только из файла...
1
Croessmah
Эксперт CЭксперт С++
13513 / 7671 / 866
Регистрация: 27.09.2012
Сообщений: 18,879
Записей в блоге: 3
Завершенные тесты: 1
04.08.2013, 08:43 #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 ) ;
}
1
Misterkat
7 / 7 / 0
Регистрация: 16.11.2012
Сообщений: 84
04.08.2013, 11:52 #8
Цитата Сообщение от ninja2 Посмотреть сообщение
И вообще чем можно заменить cin?
String.h тебе в помощь.

Не по теме:

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

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

Не по теме:

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

1
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.08.2013, 19:25 #11
Как вот это сделать?
Цитата Сообщение от ninja2 Посмотреть сообщение
Сравните результат с реализацией операции >> для типа string.
Что значит "сравнить"? По скорости чтения? Тогда как?
Настораживает вот это:
Цитата Сообщение от ninja2 Посмотреть сообщение
Допустимо организовать интерфейс функции в угоду быстродействию (даже за счет некоторого неудобства в использовании)
Это намёк на что? Все предложенные варианты, интерфейс никак не меняют...
0
04.08.2013, 19:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.08.2013, 19:25
Привет! Вот еще темы с ответами:

Поток ввода cin - C++
Привет. Я только начинаю учить C++, так что не смейтесь если проблема примитивная, но всё равно прошу помочь :) Учусь по книге...

cin.getline пропуск ввода - C++
Стыдно 3 раз за сегодня обращаться по мелким проблемам, но увы, гугл не помогает. Сама проблема заключается вот в чем. В первом вводе,...

cin остаток после ввода - C++
int b1=0; int b2=0; cout<<"Введите b1 и b2: "; cin>>b1>>b2; Вопрос такой, если мы введем: 1 2 3, то считается 1 и 2, но как...

Игнорируются потоки ввода cin - C++
Здравствуйте! У меня такая проблема: в консольном приложении на C++ игнорируются некоторые потоки ввода cin. А если я введу какие-либо...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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