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

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

Войти
Регистрация
Восстановить пароль
 
 
JustTry
0 / 0 / 0
Регистрация: 25.06.2014
Сообщений: 9
#1

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

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

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

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

Запись строки в буфер обмена clipboard - C++
Коментарии в коде показывают что нужно доделать. Спасибо заранее. #include <iostream> #include <string> #include <fstream> ...

Как скопировать из строки в буфер обмена - C++
помогите скопировать длинное число из Edita в буфер по нажатию кнопки

ввод строки - C++
привет! у меня есть проблемка.. для начала прога: #include <stdlib.h> int main (void) { return system("ping 192.168.3.1"); } ...

Ввод строки - C++
#include<iostream> #include<clocale> using namespace std; #define DEBUG class Monom{ protected: int Step,Kof; public: ...

Ввод строки - C++
У меня возникла такая проблема: как ввести строку из консоли. Написал вот что: cout<<"Input time \"hour:minute:second\"\n"; char...

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

16
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.06.2014, 07:42 #2
Цитата Сообщение от JustTry Посмотреть сообщение
Но хотелось бы реализовать это без лишних действий и переменных.
Для чего нужно такое?
0
zss
Модератор
Эксперт С++
6517 / 6079 / 2001
Регистрация: 18.12.2011
Сообщений: 15,808
Завершенные тесты: 1
26.06.2014, 07:50 #3
А не проще ли прочитать всю строку в массив
C++
1
2
char input_str[100];
cin.getline(input_str,100);
А дальше уж разбираться с ней как заблагорассудится!
0
Renji
1963 / 1361 / 307
Регистрация: 05.06.2014
Сообщений: 3,893
26.06.2014, 08:15 #4
Как считать строку с клавиатуры и оставить ее целой в буфере?
cin - istream. Значит, можно попробовать прочитать содержимое буфера через readsome и откатиться в начало через seekg. Вот сработает ли - другой вопрос. Может seekg выводит на заглушку выкидывающую исключение.
0
zss
Модератор
Эксперт С++
6517 / 6079 / 2001
Регистрация: 18.12.2011
Сообщений: 15,808
Завершенные тесты: 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
Модератор
Эксперт С++
6517 / 6079 / 2001
Регистрация: 18.12.2011
Сообщений: 15,808
Завершенные тесты: 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
Модератор
Эксперт С++
6517 / 6079 / 2001
Регистрация: 18.12.2011
Сообщений: 15,808
Завершенные тесты: 1
26.06.2014, 21:03 #9
В VS 2008, которой я пользуюсь, вообще не перегружен оператор ввода в строку.
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.06.2014, 22:03 #10
Цитата Сообщение от zss Посмотреть сообщение
Ну так и читайте целиком строку!
ТС хочет сначала память, точно под строку, выделить.
0
FraidZZ
Ex-Member
3898 / 1524 / 229
Регистрация: 06.01.2013
Сообщений: 4,050
Завершенные тесты: 1
26.06.2014, 23:14 #11
C++
1
cin.rdbuf()->in_avail()
Вернет количество символов в потоке.
0
alsav22
5426 / 4821 / 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()
0
FraidZZ
Ex-Member
3898 / 1524 / 229
Регистрация: 06.01.2013
Сообщений: 4,050
Завершенные тесты: 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';
1
alsav22
5426 / 4821 / 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 в начало буфера - забыли сделать).
0
FraidZZ
Ex-Member
3898 / 1524 / 229
Регистрация: 06.01.2013
Сообщений: 4,050
Завершенные тесты: 1
26.06.2014, 23:56 #15
Ну так ничего и не выкинешь

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

Добавлено через 25 секунд
Имхо, это самый краткий способ.
0
26.06.2014, 23:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.06.2014, 23:56
Привет! Вот еще темы с ответами:

Ввод строки - C++
Как ввести массив символов (строку)? (желательно все возможные варианты) А то через gets фигня какая-то получается.

Ввод строки - C++
Помогите решить такую проблему: Мне нужно ввести строку, которая состоит более 1 слова. когда я пишу: ... char a, b, c; cin>>a; ...

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

ввод строки - C++
вводиться строка. как выделить память под ровно то количество символов, которое ввели. как-то можно сначала узнать количество символов...


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

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

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