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

Ввод строки в буфер - C++

Восстановить пароль Регистрация
 
JustTry
0 / 0 / 0
Регистрация: 25.06.2014
Сообщений: 9
26.06.2014, 07:13     Ввод строки в буфер #1
Как считать строку с клавиатуры и оставить ее целой в буфере?
Исходя из своих знаний, нашел только такой вариант:
C++
1
2
3
char a;
cin.get(a);       // считываем 1 символ, остальное остается в буфере
cin.putback(a); // помещаем символ обратно
И тогда получаем целую строку.
Но хотелось бы реализовать это без лишних действий и переменных. Возможно ли это и если да то как?

Добавлено через 14 часов 46 минут
Неужели таких способов нет?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.06.2014, 07:13     Ввод строки в буфер
Посмотрите здесь:

C++ с++ ввод строки и ....
C++ Ввод строки
C++ Ввод строки
ввод строки C++
Как скопировать из строки в буфер обмена C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.06.2014, 07:42     Ввод строки в буфер #2
Цитата Сообщение от JustTry Посмотреть сообщение
Но хотелось бы реализовать это без лишних действий и переменных.
Для чего нужно такое?
zss
Модератор
Эксперт С++
 Аватар для zss
5943 / 5548 / 1783
Регистрация: 18.12.2011
Сообщений: 14,171
Завершенные тесты: 1
26.06.2014, 07:50     Ввод строки в буфер #3
А не проще ли прочитать всю строку в массив
C++
1
2
char input_str[100];
cin.getline(input_str,100);
А дальше уж разбираться с ней как заблагорассудится!
Renji
1535 / 983 / 240
Регистрация: 05.06.2014
Сообщений: 2,960
26.06.2014, 08:15     Ввод строки в буфер #4
Как считать строку с клавиатуры и оставить ее целой в буфере?
cin - istream. Значит, можно попробовать прочитать содержимое буфера через readsome и откатиться в начало через seekg. Вот сработает ли - другой вопрос. Может seekg выводит на заглушку выкидывающую исключение.
zss
Модератор
Эксперт С++
 Аватар для zss
5943 / 5548 / 1783
Регистрация: 18.12.2011
Сообщений: 14,171
Завершенные тесты: 1
26.06.2014, 08:22     Ввод строки в буфер #5
Цитата Сообщение от Renji Посмотреть сообщение
Вот сработает ли - другой вопрос
Я попробовал. Не получается - читает какую-то фигню.
JustTry
0 / 0 / 0
Регистрация: 25.06.2014
Сообщений: 9
26.06.2014, 19:41  [ТС]     Ввод строки в буфер #6
zss, хочу создавать строку и динамически выделять память ровно под нее. Что-то похожее на класс String пишу, для обучения.
zss
Модератор
Эксперт С++
 Аватар для zss
5943 / 5548 / 1783
Регистрация: 18.12.2011
Сообщений: 14,171
Завершенные тесты: 1
26.06.2014, 20:25     Ввод строки в буфер #7
Цитата Сообщение от JustTry Посмотреть сообщение
Что-то похожее на класс String пишу
Ну так и читайте целиком строку!
JustTry
0 / 0 / 0
Регистрация: 25.06.2014
Сообщений: 9
26.06.2014, 20:39  [ТС]     Ввод строки в буфер #8
zss, А в оригинале используется просто временный массив фиксированного размера?
zss
Модератор
Эксперт С++
 Аватар для zss
5943 / 5548 / 1783
Регистрация: 18.12.2011
Сообщений: 14,171
Завершенные тесты: 1
26.06.2014, 21:03     Ввод строки в буфер #9
В VS 2008, которой я пользуюсь, вообще не перегружен оператор ввода в строку.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.06.2014, 22:03     Ввод строки в буфер #10
Цитата Сообщение от zss Посмотреть сообщение
Ну так и читайте целиком строку!
ТС хочет сначала память, точно под строку, выделить.
FraidZZ
Модератор
 Аватар для FraidZZ
3878 / 1504 / 227
Регистрация: 06.01.2013
Сообщений: 4,029
Завершенные тесты: 1
26.06.2014, 23:14     Ввод строки в буфер #11
C++
1
cin.rdbuf()->in_avail()
Вернет количество символов в потоке.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.06.2014, 23:25     Ввод строки в буфер #12
Цитата Сообщение от JustTry Посмотреть сообщение
char a;
cin.get(a); // считываем 1 символ, остальное остается в буфере
cin.putback(a); // помещаем символ обратно
И тогда получаем целую строку.
Но хотелось бы реализовать это без лишних действий и переменных.
Это уже потом можно:
Цитата Сообщение от FraidZZ Посмотреть сообщение
cin.rdbuf()->in_avail()
FraidZZ
Модератор
 Аватар для FraidZZ
3878 / 1504 / 227
Регистрация: 06.01.2013
Сообщений: 4,029
Завершенные тесты: 1
26.06.2014, 23:41     Ввод строки в буфер #13
Угу, сначал очищаем буфер:
C++
1
cin.ignore(cin.rdbuf()->in_avail());
Затем нам необходимо запросить ввод строки у пользователя, для этого

C++
1
2
char a;
cin.get(a);
Теперь у нас в потоке введенная пользователем строка кроме первого символа. Выделяем буфер:

C++
1
2
int c = cin.rdbuf()->in_avail();
char *buf = new char[ c + 2 ]; //+ 2 для уже считанного символа плюс завершающий.
И считываем:

C++
1
cin.read(buf + 1, c);
Не забываем добавить '\0' (без понятия, добавляет ли его cin.read())

C++
1
buf[ c + 1 ] = '\0';
.

Все вместе:
C++
1
2
3
4
5
6
7
8
char a, *buf;
int c;
cin.ignore(cin.rdbuf()->in_avail());
cin.get(a);
c = cin.rdbuf()->in_avail();
buf = new char[ c + 2 ];
cin.read(buf + 1, c);
buf[ c + 1 ] = '\0';
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.06.2014, 23:52     Ввод строки в буфер #14
FraidZZ, всё замечательно, но:
Цитата Сообщение от JustTry Посмотреть сообщение
Но хотелось бы реализовать это без лишних действий и переменных.
Цитата Сообщение от FraidZZ Посмотреть сообщение
char a;
cin.get(a);
Цитата Сообщение от JustTry Посмотреть сообщение
char a;
cin.get(a);
Переменных и действий столько же (вместо cin.putback(a) нужно добавить запись a в начало буфера - забыли сделать).
FraidZZ
Модератор
 Аватар для FraidZZ
3878 / 1504 / 227
Регистрация: 06.01.2013
Сообщений: 4,029
Завершенные тесты: 1
26.06.2014, 23:56     Ввод строки в буфер #15
Ну так ничего и не выкинешь

Заставить пользователя ввести что-то - надо, отсюда переменная a. Подсчитать надо, за этим переменная с. Ну и сам буфер - *buf.

Добавлено через 25 секунд
Имхо, это самый краткий способ.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.06.2014, 23:59     Ввод строки в буфер #16
Цитата Сообщение от FraidZZ Посмотреть сообщение
Ну так ничего и не выкинешь
Вот и я так думаю. Ничего другого в голову не приходит.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2014, 06:39     Ввод строки в буфер
Еще ссылки по теме:

Ввод строки C++
C++ Ввод строки в С++
C++ Запись строки в буфер обмена clipboard

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

Или воспользуйтесь поиском по форуму:
JustTry
0 / 0 / 0
Регистрация: 25.06.2014
Сообщений: 9
27.06.2014, 06:39  [ТС]     Ввод строки в буфер #17
Понятно. Раз короче не сделать то придется писать так. Всем спасибо за ответы )
Yandex
Объявления
27.06.2014, 06:39     Ввод строки в буфер
Ответ Создать тему
Опции темы

Текущее время: 13:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru