Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.82/65: Рейтинг темы: голосов - 65, средняя оценка - 4.82
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
1

Считать строку с консоли

18.09.2014, 10:13. Показов 12758. Ответов 30
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
такая задачка, препод хочет чтобы мы не юзали класс string, а юзали массивы символов, причем только динамические (лаба такая просто), запретил выделять буфер (например char* str = new char[100]), так как же мне считать строку с консоли??? читать посимвольно с помощью cin.get и каждый раз перевыделять память на 1 символ? или может есть какая то специальная функция для такого случая?

Добавлено через 1 минуту
потому что getline вроде бы требует задать количество считываемых символов, а я не знаю сколько их будет...

Добавлено через 48 секунд
хотя вот со string я бы сделал так: getline(cin, str) и оно канает, может можно и с массивом как то так заюзать?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.09.2014, 10:13
Ответы с готовыми решениями:

Считать строку из консоли
Как в с++ получить в виде строки то, что ответила система на команду. То есть если я, к примеру,...

Считать строку из консоли
Добрый день. Как правильно написать для считывания строки из консоли? Пишу так: #include...

Считать строку из консоли
Здравствуйте. Скажите, пожалуйста, как можно считать текст из консоли, завершающийся EOF? Хотел...

Как считать строку с консоли?
есть код, если раскоментить с 55-ой по 62-ую будет вылетать при первом же сеттере surname. как это...

30
Эксперт по математике/физикеЭксперт С++
2050 / 1368 / 396
Регистрация: 16.05.2013
Сообщений: 3,508
Записей в блоге: 6
18.09.2014, 10:17 2
Удивите преподавателя знанием векторов. И не строки и динамическое выделение памяти.
0
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
18.09.2014, 10:17  [ТС] 3
Цитата Сообщение от Ilot Посмотреть сообщение
Удивите преподавателя знанием векторов. И не строки и динамическое выделение памяти.
нет, вектора юзать тоже нельзя, вообще нельзя юзать std
0
Эксперт по математике/физикеЭксперт С++
2050 / 1368 / 396
Регистрация: 16.05.2013
Сообщений: 3,508
Записей в блоге: 6
18.09.2014, 10:22 4
Цитата Сообщение от GetHelp Посмотреть сообщение
юзали массивы символов, причем только динамические (лаба такая просто), запретил выделять буфер (например char* str = new char[100])
Тогда как это понять?
0
Модератор
Эксперт С++
13508 / 10758 / 6412
Регистрация: 18.12.2011
Сообщений: 28,723
18.09.2014, 10:23 5
Если в файле одна строка, то можно так
C++
1
2
3
4
5
    ifstream ff("file.txt");
    ff.seekg(0,ios::end); // перешли в конец файла
    int pos=ff.tellg(); // узнали текущую позицию
    ff.seekg(0,ios::beg); // перешли на начало файла
    char* str=new char[pos+1]; // выделили память под весь текст файла
0
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
18.09.2014, 10:24  [ТС] 6
Цитата Сообщение от Ilot Посмотреть сообщение
Тогда как это понять?
new это не std как бы...

Цитата Сообщение от zss Посмотреть сообщение
Если в файле одна строка, то можно так
читаем не из файла, а просто из консоли...
0
2279 / 1770 / 741
Регистрация: 27.07.2012
Сообщений: 5,254
18.09.2014, 10:27 7
Цитата Сообщение от GetHelp Посмотреть сообщение
new это не std как бы...
Зато cin - уже std.
Вообще, непонятное задание. Есть его "официальный" текст?
0
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
18.09.2014, 10:28  [ТС] 8
Цитата Сообщение от John Prick Посмотреть сообщение
Зато cin - уже std.
Вообще, непонятное задание. Есть его "официальный" текст?
ну хорошо можно юзать функции считывания типа cin, но нельзя использовать никакие контейнеры (string, vector и т.п.)
0
Модератор
Эксперт С++
13508 / 10758 / 6412
Регистрация: 18.12.2011
Сообщений: 28,723
18.09.2014, 10:32 9
Цитата Сообщение от GetHelp Посмотреть сообщение
читаем не из файла, а просто из консоли
В любом случае, читаемые данные надо куда-то девать.
Можете читать посимвольно до конца строки ('\n') и писать в файл
открытый для записи и чтения, а потом использовать предложенную мной методу.
0
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
18.09.2014, 10:33  [ТС] 10
Цитата Сообщение от zss Посмотреть сообщение
В любом случае, читаемые данные надо куда-то девать.
Можете читать посимвольно до конца строки ('\n') и писать в файл
открытый для записи и чтения, а потом использовать предложенную мной методу.
да никуда их не надо девать, они просто считываются... а посимвольное считывание я предложил с самого начала, просто думал может можно как то проще...
0
Эксперт по математике/физикеЭксперт С++
2050 / 1368 / 396
Регистрация: 16.05.2013
Сообщений: 3,508
Записей в блоге: 6
18.09.2014, 10:35 11
Цитата Сообщение от GetHelp Посмотреть сообщение
new это не std как бы...
Я не о том спрашивал. Вы пишите, что препод поручил вам использовать динамические массивы, но запретил оператор new. Бред. Четко формулируйте задание.
0
Guardian of Asgaard
377 / 319 / 197
Регистрация: 11.11.2013
Сообщений: 1,046
18.09.2014, 10:39 12
GetHelp, как вариант, таки можно создать массив чаров, но каждый раз выделять память на 1 символ, это не тру, лучше использовать некий коэффициент при расчёте выделения памяти, чтоб сразу на несколько символов, в зависимости от размера, это и будет динамическое выделение памяти. Примерно так:
C++
1
2
3
4
5
6
7
8
int newLength(int length, int index) {
    float multiple = 1.25;
 
    if ( index >= length / multiple ) {
        return length * multiple;
    }
    return length;
}
0
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
18.09.2014, 10:39  [ТС] 13
Цитата Сообщение от Ilot Посмотреть сообщение
Я не о том спрашивал. Вы пишите, что препод поручил вам использовать динамические массивы, но запретил оператор new. Бред. Четко формулируйте задание.
я такого не писал, не придумывайте за меня...
0
Модератор
Эксперт С++
13508 / 10758 / 6412
Регистрация: 18.12.2011
Сообщений: 28,723
18.09.2014, 10:40 14
Цитата Сообщение от GetHelp Посмотреть сообщение
они просто считываются
Просто считываются куда?
Если в воздух (т.е. читаем в одиночный символ стирая предыдущее значение),
то для консольного ввода отмотать поток назад нельзя и данные потеряются.
0
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
18.09.2014, 10:47  [ТС] 15
Цитата Сообщение от zss Посмотреть сообщение
Просто считываются куда?
Если в воздух (т.е. читаем в одиночный символ стирая предыдущее значение),
то для консольного ввода отмотать поток назад нельзя и данные потеряются.
да в память они считываются куда же еще... в выделенную память, по окончании программы память удаляется, что тут не понятного?

Добавлено через 1 минуту
Цитата Сообщение от Ilot Посмотреть сообщение
Я не о том спрашивал. Вы пишите, что препод поручил вам использовать динамические массивы, но запретил оператор new. Бред. Четко формулируйте задание.
кажется понял о чем вы
Цитата Сообщение от GetHelp Посмотреть сообщение
запретил выделять буфер (например char* str = new char[100])
буфер да, запретил, но не в принципе использование new

Добавлено через 1 минуту
Darkrduk, что то не понял что делает ваша функция... и юзать в функции 2 раза return это преступление, за него надо руки отрубать -_-
0
Guardian of Asgaard
377 / 319 / 197
Регистрация: 11.11.2013
Сообщений: 1,046
18.09.2014, 10:48 16
GetHelp, тогда выделяйте память каждый раз на 1 символ
0
Заблокирован
18.09.2014, 17:11 17
Цитата Сообщение от Ilot Посмотреть сообщение
Вы пишите, что препод поручил вам использовать динамические массивы, но запретил оператор new. Бред.
Возможно, нужно писать в православном С. Тогда память выделяется malloc.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
18.09.2014, 17:24 18
Цитата Сообщение от GetHelp Посмотреть сообщение
и юзать в функции 2 раза return это преступление, за него надо руки отрубать
с чего бы это такие выводы? Хотите сказать, что, к примеру, за такой код надо отрубать руки?
C
1
2
3
4
5
6
7
int indexOf(const char *s, const char c)
{
    for(int i = 0, cnt = strlen(s); i < cnt; ++i)
        if(s[i] == c)
            return i;
    return -1;
}
По вашему, надо обязательно так, да?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
int indexOf(const char *s, const char c)
{
    int index = -1;
    for(int i = 0, cnt = strlen(s); i < cnt; ++i)
    {
        if(s[i] == c)
        {
            index = i;
            break;
        }
    }
    return index;
}
0
189 / 177 / 111
Регистрация: 22.06.2009
Сообщений: 533
18.09.2014, 17:41 19
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream> // было #include <include>
using std::cout;
using std::cin;
using std::endl;
 
int main() 
{
       char* i = new char;
       cin>>*i; // было cin>>i;
       cout<<*i<<endl; // было cout<<i<<endl;
       system("pause");
       delete i; // было delete [] i;
       i = nullptr;
      return 0;
}
не ?
0
Модератор
Эксперт С++
13508 / 10758 / 6412
Регистрация: 18.12.2011
Сообщений: 28,723
18.09.2014, 18:10 20
worldown, А что должна делать Ваша программа?
Создать переменную динамически, ввести в нее значение и вывести его на экран?
Причем тут тогда тема "Считать строку"?
А если все-таки имели ввиду иассив,
то программа эквивалентна такой:
C++
1
2
3
4
5
6
7
8
int main() 
{
       char str[256];
       cin.getline(str,256); 
       cout<<str<<endl;
       system("pause");
      return 0;
}
0
18.09.2014, 18:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.09.2014, 18:10
Помогаю со студенческими работами здесь

Считать посимвольно строку из консоли
Добрый день! Необходимо в программе организовать считывание длинной строки из консоли. Строка...

Можно ли считать с консоли строку по шаблону?
например, scanf можно считать число и записать в переменную. int n; scanf(&quot;%d&quot;, &amp;n); а...

Каким образом нормально считать с консоли строку?
Дело в том что необходимо считывать строки вводимые с консоли. Но полноценно это не выходит. Ф-ция...

Считать строку с консоли (из файла). Найти количество знаков препинания в строке
Считать строку с консоли (из файла). Найти количество знаков препинания в строке.Помогите...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru