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

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

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

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

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

Как считать строку с клавиатуры и оставить ее целой в буфере?
Исходя из своих знаний, нашел только такой вариант:
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++
помогите скопировать длинное число из Edita в буфер по нажатию кнопки

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

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

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

Ввод строки - C++
Доброго времени суток форумчане. Вот возник вопрос: при вводе определенного текста мне нужно чтобы выдавало определенный результат, но...

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

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

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

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

Добавлено через 25 секунд
Имхо, это самый краткий способ.
alsav22
5416 / 4812 / 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++
Как ввести массив символов (строку)? (желательно все возможные варианты) А то через gets фигня какая-то получается.

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

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

Ввод/вывод строки - C++
#include <iostream> using std::cin; using std::cout; using std::endl; #include <string> using std::strlen; using...


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

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

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