Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.85/27: Рейтинг темы: голосов - 27, средняя оценка - 4.85
GetHelp
60 / 61 / 11
Регистрация: 27.02.2013
Сообщений: 1,112
1

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

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

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

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

Добавлено через 48 секунд
хотя вот со string я бы сделал так: getline(cin, str) и оно канает, может можно и с массивом как то так заюзать?

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.09.2014, 10:13
Ответы с готовыми решениями:

Считать строку из консоли
Здравствуйте. Скажите, пожалуйста, как можно считать текст из консоли,...

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

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

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

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

30
Ilot
Эксперт С++
1832 / 1190 / 342
Регистрация: 16.05.2013
Сообщений: 3,139
Записей в блоге: 5
Завершенные тесты: 1
18.09.2014, 10:17 2
Удивите преподавателя знанием векторов. И не строки и динамическое выделение памяти.
0
GetHelp
60 / 61 / 11
Регистрация: 27.02.2013
Сообщений: 1,112
18.09.2014, 10:17  [ТС] 3
Цитата Сообщение от Ilot Посмотреть сообщение
Удивите преподавателя знанием векторов. И не строки и динамическое выделение памяти.
нет, вектора юзать тоже нельзя, вообще нельзя юзать std
0
Ilot
Эксперт С++
1832 / 1190 / 342
Регистрация: 16.05.2013
Сообщений: 3,139
Записей в блоге: 5
Завершенные тесты: 1
18.09.2014, 10:22 4
Цитата Сообщение от GetHelp Посмотреть сообщение
юзали массивы символов, причем только динамические (лаба такая просто), запретил выделять буфер (например char* str = new char[100])
Тогда как это понять?
0
zss
Модератор
Эксперт С++
7460 / 6836 / 4317
Регистрация: 18.12.2011
Сообщений: 18,086
Завершенные тесты: 1
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
GetHelp
60 / 61 / 11
Регистрация: 27.02.2013
Сообщений: 1,112
18.09.2014, 10:24  [ТС] 6
Цитата Сообщение от Ilot Посмотреть сообщение
Тогда как это понять?
new это не std как бы...

Цитата Сообщение от zss Посмотреть сообщение
Если в файле одна строка, то можно так
читаем не из файла, а просто из консоли...
0
John Prick
837 / 768 / 258
Регистрация: 27.07.2012
Сообщений: 2,180
Завершенные тесты: 3
18.09.2014, 10:27 7
Цитата Сообщение от GetHelp Посмотреть сообщение
new это не std как бы...
Зато cin - уже std.
Вообще, непонятное задание. Есть его "официальный" текст?
0
GetHelp
60 / 61 / 11
Регистрация: 27.02.2013
Сообщений: 1,112
18.09.2014, 10:28  [ТС] 8
Цитата Сообщение от John Prick Посмотреть сообщение
Зато cin - уже std.
Вообще, непонятное задание. Есть его "официальный" текст?
ну хорошо можно юзать функции считывания типа cin, но нельзя использовать никакие контейнеры (string, vector и т.п.)
0
zss
Модератор
Эксперт С++
7460 / 6836 / 4317
Регистрация: 18.12.2011
Сообщений: 18,086
Завершенные тесты: 1
18.09.2014, 10:32 9
Цитата Сообщение от GetHelp Посмотреть сообщение
читаем не из файла, а просто из консоли
В любом случае, читаемые данные надо куда-то девать.
Можете читать посимвольно до конца строки ('\n') и писать в файл
открытый для записи и чтения, а потом использовать предложенную мной методу.
0
GetHelp
60 / 61 / 11
Регистрация: 27.02.2013
Сообщений: 1,112
18.09.2014, 10:33  [ТС] 10
Цитата Сообщение от zss Посмотреть сообщение
В любом случае, читаемые данные надо куда-то девать.
Можете читать посимвольно до конца строки ('\n') и писать в файл
открытый для записи и чтения, а потом использовать предложенную мной методу.
да никуда их не надо девать, они просто считываются... а посимвольное считывание я предложил с самого начала, просто думал может можно как то проще...
0
Ilot
Эксперт С++
1832 / 1190 / 342
Регистрация: 16.05.2013
Сообщений: 3,139
Записей в блоге: 5
Завершенные тесты: 1
18.09.2014, 10:35 11
Цитата Сообщение от GetHelp Посмотреть сообщение
new это не std как бы...
Я не о том спрашивал. Вы пишите, что препод поручил вам использовать динамические массивы, но запретил оператор new. Бред. Четко формулируйте задание.
0
Boleon
Guardian of Asgaard
373 / 316 / 197
Регистрация: 11.11.2013
Сообщений: 1,046
Завершенные тесты: 1
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
GetHelp
60 / 61 / 11
Регистрация: 27.02.2013
Сообщений: 1,112
18.09.2014, 10:39  [ТС] 13
Цитата Сообщение от Ilot Посмотреть сообщение
Я не о том спрашивал. Вы пишите, что препод поручил вам использовать динамические массивы, но запретил оператор new. Бред. Четко формулируйте задание.
я такого не писал, не придумывайте за меня...
0
zss
Модератор
Эксперт С++
7460 / 6836 / 4317
Регистрация: 18.12.2011
Сообщений: 18,086
Завершенные тесты: 1
18.09.2014, 10:40 14
Цитата Сообщение от GetHelp Посмотреть сообщение
они просто считываются
Просто считываются куда?
Если в воздух (т.е. читаем в одиночный символ стирая предыдущее значение),
то для консольного ввода отмотать поток назад нельзя и данные потеряются.
0
GetHelp
60 / 61 / 11
Регистрация: 27.02.2013
Сообщений: 1,112
18.09.2014, 10:47  [ТС] 15
Цитата Сообщение от zss Посмотреть сообщение
Просто считываются куда?
Если в воздух (т.е. читаем в одиночный символ стирая предыдущее значение),
то для консольного ввода отмотать поток назад нельзя и данные потеряются.
да в память они считываются куда же еще... в выделенную память, по окончании программы память удаляется, что тут не понятного?

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

Добавлено через 1 минуту
Darkrduk, что то не понял что делает ваша функция... и юзать в функции 2 раза return это преступление, за него надо руки отрубать -_-
0
Boleon
Guardian of Asgaard
373 / 316 / 197
Регистрация: 11.11.2013
Сообщений: 1,046
Завершенные тесты: 1
18.09.2014, 10:48 16
GetHelp, тогда выделяйте память каждый раз на 1 символ
0
IrineK
Заблокирован
18.09.2014, 17:11 17
Цитата Сообщение от Ilot Посмотреть сообщение
Вы пишите, что препод поручил вам использовать динамические массивы, но запретил оператор new. Бред.
Возможно, нужно писать в православном С. Тогда память выделяется malloc.
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16755 / 6646 / 865
Регистрация: 12.06.2012
Сообщений: 19,897
Завершенные тесты: 1
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
worldown
168 / 165 / 102
Регистрация: 22.06.2009
Сообщений: 483
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
zss
Модератор
Эксперт С++
7460 / 6836 / 4317
Регистрация: 18.12.2011
Сообщений: 18,086
Завершенные тесты: 1
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.09.2014, 18:10

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

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

Как считать русские символы как строку в консоли
На консоль текст русский выводиться,а вот при считывании он в казябриках. ...


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

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

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