Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
JustTry
0 / 0 / 0
Регистрация: 25.06.2014
Сообщений: 9
#1

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

26.06.2014, 07:13. Просмотров 855. Ответов 16
Метки нет (Все метки)

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

Добавлено через 14 часов 46 минут
Неужели таких способов нет?
http://www.cyberforum.ru/cpp-beginners/thread619827.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.06.2014, 07:13
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Ввод строки в буфер (C++):

Запись строки в буфер обмена clipboard
Коментарии в коде показывают что нужно доделать. Спасибо заранее. #include...

с++ ввод строки и ....
По заданию: Пользователь вводит строку и символ, программа выводит сколько раз...

ввод строки
вводиться строка. как выделить память под ровно то количество символов,...

Ввод строки
#include<iostream> #include<clocale> using namespace std; #define DEBUG ...

Ввод строки
У меня возникла такая проблема: как ввести строку из консоли. Написал вот...

16
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.06.2014, 07:42 #2
Цитата Сообщение от JustTry Посмотреть сообщение
Но хотелось бы реализовать это без лишних действий и переменных.
Для чего нужно такое?
0
zss
Модератор
Эксперт С++
6952 / 6514 / 4135
Регистрация: 18.12.2011
Сообщений: 17,183
Завершенные тесты: 1
26.06.2014, 07:50 #3
А не проще ли прочитать всю строку в массив
C++
1
2
char input_str[100];
cin.getline(input_str,100);
А дальше уж разбираться с ней как заблагорассудится!
0
Renji
2123 / 1482 / 452
Регистрация: 05.06.2014
Сообщений: 4,320
26.06.2014, 08:15 #4
Как считать строку с клавиатуры и оставить ее целой в буфере?
cin - istream. Значит, можно попробовать прочитать содержимое буфера через readsome и откатиться в начало через seekg. Вот сработает ли - другой вопрос. Может seekg выводит на заглушку выкидывающую исключение.
0
zss
Модератор
Эксперт С++
6952 / 6514 / 4135
Регистрация: 18.12.2011
Сообщений: 17,183
Завершенные тесты: 1
26.06.2014, 08:22 #5
Цитата Сообщение от Renji Посмотреть сообщение
Вот сработает ли - другой вопрос
Я попробовал. Не получается - читает какую-то фигню.
0
JustTry
0 / 0 / 0
Регистрация: 25.06.2014
Сообщений: 9
26.06.2014, 19:41  [ТС] #6
zss, хочу создавать строку и динамически выделять память ровно под нее. Что-то похожее на класс String пишу, для обучения.
0
zss
Модератор
Эксперт С++
6952 / 6514 / 4135
Регистрация: 18.12.2011
Сообщений: 17,183
Завершенные тесты: 1
26.06.2014, 20:25 #7
Цитата Сообщение от JustTry Посмотреть сообщение
Что-то похожее на класс String пишу
Ну так и читайте целиком строку!
0
JustTry
0 / 0 / 0
Регистрация: 25.06.2014
Сообщений: 9
26.06.2014, 20:39  [ТС] #8
zss, А в оригинале используется просто временный массив фиксированного размера?
0
zss
Модератор
Эксперт С++
6952 / 6514 / 4135
Регистрация: 18.12.2011
Сообщений: 17,183
Завершенные тесты: 1
26.06.2014, 21:03 #9
В VS 2008, которой я пользуюсь, вообще не перегружен оператор ввода в строку.
0
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.06.2014, 22:03 #10
Цитата Сообщение от zss Посмотреть сообщение
Ну так и читайте целиком строку!
ТС хочет сначала память, точно под строку, выделить.
0
Eva Rosalene
Male-to-Female
4049 / 1586 / 301
Регистрация: 06.01.2013
Сообщений: 4,176
Завершенные тесты: 2
26.06.2014, 23:14 #11
C++
1
cin.rdbuf()->in_avail()
Вернет количество символов в потоке.
0
alsav22
5438 / 4833 / 831
Регистрация: 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()
0
Eva Rosalene
Male-to-Female
4049 / 1586 / 301
Регистрация: 06.01.2013
Сообщений: 4,176
Завершенные тесты: 2
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';
1
alsav22
5438 / 4833 / 831
Регистрация: 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 в начало буфера - забыли сделать).
0
Eva Rosalene
Male-to-Female
4049 / 1586 / 301
Регистрация: 06.01.2013
Сообщений: 4,176
Завершенные тесты: 2
26.06.2014, 23:56 #15
Ну так ничего и не выкинешь

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

Добавлено через 25 секунд
Имхо, это самый краткий способ.
0
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.06.2014, 23:59 #16
Цитата Сообщение от FraidZZ Посмотреть сообщение
Ну так ничего и не выкинешь
Вот и я так думаю. Ничего другого в голову не приходит.
1
JustTry
0 / 0 / 0
Регистрация: 25.06.2014
Сообщений: 9
27.06.2014, 06:39  [ТС] #17
Понятно. Раз короче не сделать то придется писать так. Всем спасибо за ответы )
0
27.06.2014, 06:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2014, 06:39
Привет! Вот еще темы с решениями:

Ввод строки
Как ввести массив символов (строку)? (желательно все возможные варианты) А то...

ввод строки
привет! у меня есть проблемка.. для начала прога: #include <stdlib.h> int...

Ввод строки
Помогите решить такую проблему: Мне нужно ввести строку, которая состоит более...

Ввод строки в С++
Подскажите как сделать так, чтобы введенная строка (string) сохранилась без...


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

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

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