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

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

Войти
Регистрация
Восстановить пароль
 
sashadereh
3 / 3 / 1
Регистрация: 30.09.2012
Сообщений: 63
#1

Можно ли в cin ввести строку любого размера? - C++

11.10.2013, 15:02. Просмотров 831. Ответов 14
Метки нет (Все метки)

Собственно можно ли в cin ввести строку неопределенного размера, пользуясь только char * ?
Например:
C++
1
2
3
4
char *temp = new char;
int strLen;
cin>>strLen;
cin.getline(temp, strLen);
Или если явно память сразу отвести тоже нельзя, например:
C++
1
char *temp = new char[1000];
То каким образом можно ввести строку и можно ли?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2013, 15:02     Можно ли в cin ввести строку любого размера?
Посмотрите здесь:
Как с помощью cin ввести нуль терминированную строку? C++
C++ Можно ли ввести с помощью std::cin значения элементов двух массивов?
C++ Как сделать чтобы при компиляции cin>>a>>b>>c; вводить можно было в одну строку?
C++ Ввести 2 строки и вывести на экран "Можно" если из 1 строки можно составить 2 строку
C++ Scanf() для строки любого размера
C++ cin.getline() не читает строку
CIN COUT в одну строку C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rangerx
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,911
11.10.2013, 15:26     Можно ли в cin ввести строку любого размера? #2
Цитата Сообщение от sashadereh Посмотреть сообщение
Собственно можно ли в cin ввести строку неопределенного размера, пользуясь только char * ?
Используя cin - можно(но для это придётся написать свою функцию ввода), используя cin.getline - нет
Raali
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,056
Завершенные тесты: 1
11.10.2013, 15:27     Можно ли в cin ввести строку любого размера? #3
C++
1
2
std::string s;
std::cin >> s;
sashadereh
3 / 3 / 1
Регистрация: 30.09.2012
Сообщений: 63
11.10.2013, 18:22  [ТС]     Можно ли в cin ввести строку любого размера? #4
rangerx, я поэтому и спрашиваю) Если говорите можно, не покажете как?
Raali,
Цитата Сообщение от sashadereh Посмотреть сообщение
пользуясь только char *
Добавлено через 30 минут
Возможно не совсем понятно чего я хочу

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class myClass
{
char *str;
friend istream &operator>>(istream &, myClass &);
/*
...
*/
};
 
int main()
{
myClass object;
cin>>object;
/*
...
*/
return 0;
}
Так вот в перегруженном операторе хочется вводить нашу char *str, не спрашивая у пользователя длину желаемой строки и не выделяя сразу память, допустим, на 1000 символов? Т.е. тупо дать пользователю вводить сколь угодно символов до нажатия Enter, например.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.10.2013, 18:27     Можно ли в cin ввести строку любого размера? #5
sashadereh, это делается примерно так:
Код
создаем строку1 (допустим на 1000 символов)
создаем строку-буфер на 20 символов

в цикле считываем в буфер 20 символов 
{
   если строка1 заполнена {
       создаем строку2 с большей длиной
       копируем в строку2 строку1
       удаляем строку1
       замещаем строку1 строкой2
   }
   
   помещаем в конец строки1 строку-буфер
}
Raali
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,056
Завершенные тесты: 1
11.10.2013, 18:52     Можно ли в cin ввести строку любого размера? #6
Цитата Сообщение от Jupiter Посмотреть сообщение
создаем строку1 (допустим на 1000 символов)
создаем строку-буфер на 20 символов
в цикле считываем в буфер 20 символов
{
* *если строка1 заполнена {
* * * *создаем строку2 с большей длиной
* * * *копируем в строку2 строку1
* * * *удаляем строку1
* * * *замещаем строку1 строкой2
* *}
помещаем в конец строки1 строку-буфер
}
в итоге можно прийти к std::vector<char>
а потом перейти на string когда все надоест
Croessmah
Модератор
Эксперт CЭксперт С++
13052 / 7315 / 814
Регистрация: 27.09.2012
Сообщений: 18,052
Записей в блоге: 3
Завершенные тесты: 1
11.10.2013, 18:54     Можно ли в cin ввести строку любого размера? #7
Ввод строки в динамический массив
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
11.10.2013, 20:19     Можно ли в cin ввести строку любого размера? #8
sashadereh, Нельзя. Используй строки std::string.
Croessmah
11.10.2013, 20:24
  #9

Не по теме:

Цитата Сообщение от ninja2 Посмотреть сообщение
sashadereh, Нельзя. Используй строки std::string.
Все говорят что можно, один только ninja доказывает невозможность

SummerRain
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
11.10.2013, 20:34     Можно ли в cin ввести строку любого размера? #10
Цитата Сообщение от Croessmah Посмотреть сообщение
Все говорят что можно, один только ninja доказывает невозможность
далеко пойдет
sashadereh
3 / 3 / 1
Регистрация: 30.09.2012
Сообщений: 63
11.10.2013, 21:06  [ТС]     Можно ли в cin ввести строку любого размера? #11
Спасибо всем за ответы!
Tulosba
11.10.2013, 21:33
  #12

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
только ninja доказывает невозможность
какой-то анти-ниндзя получается.

iRomul
158 / 99 / 11
Регистрация: 17.10.2012
Сообщений: 480
Завершенные тесты: 1
11.10.2013, 23:52     Можно ли в cin ввести строку любого размера? #13
Окей, я себе это вижу так - мы пишем строку, жмём энтер, строка оказывается в буфере, мы спрашиваем длину строки в буфере, выделяем нужное количество в массиве и пишем из буфера массив. Можно ли так сделать? И тогда сразу возникает вопрос (если можно) - какой размер этого буфера.
Tulosba,

Не по теме:

негоже с гуру спорить

Croessmah
Модератор
Эксперт CЭксперт С++
13052 / 7315 / 814
Регистрация: 27.09.2012
Сообщений: 18,052
Записей в блоге: 3
Завершенные тесты: 1
12.10.2013, 00:30     Можно ли в cin ввести строку любого размера? #14
Цитата Сообщение от iRomul Посмотреть сообщение
Окей, я себе это вижу так - мы пишем строку, жмём энтер, строка оказывается в буфере, мы спрашиваем длину строки в буфере, выделяем нужное количество в массиве и пишем из буфера массив. Можно ли так сделать? И тогда сразу возникает вопрос (если можно) - какой размер этого буфера.
Можно читать по одному символу, выделяя память с запасом на несколько штук вперед.
Если есть возможность получить количество символов в потоке, то можно как по ссылке выше попробовать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2013, 02:08     Можно ли в cin ввести строку любого размера?
Еще ссылки по теме:
Оператор cin в одну строку C++
cout cin в одну строку C++
cin без перехода на новую строку C++
cin.getline переброс через строку C++
C++ Считать строку с пробелами с помощью Std::cin

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

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.10.2013, 02:08     Можно ли в cin ввести строку любого размера? #15
Цитата Сообщение от iRomul Посмотреть сообщение
Можно ли так сделать?
C++
1
2
3
4
5
6
7
8
9
    char ch;
    cin.get(ch);
    cin.unget();
    streamsize size = cin.rdbuf()->in_avail();
    char *str = new char[size];
    cin.getline(str, size);
    
    cout << str << endl;
    delete [] str;
Yandex
Объявления
12.10.2013, 02:08     Можно ли в cin ввести строку любого размера?
Ответ Создать тему
Опции темы

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