|
1 / 1 / 0
Регистрация: 23.09.2015
Сообщений: 42
|
||||||
Реализация своей функции getline12.10.2015, 09:08. Показов 23683. Ответов 57
Метки нет (Все метки)
Здравствуйте! Не могу решить задачку.
Постановка: Реализуйте функцию getline, которая считывает поток ввода посимвольно, пока не достигнет конца потока или не встретит символ переноса строки ('\n'), и возвращает C-style строку с прочитанными символами. Обратите внимание, что так как размер ввода заранее неизвестен, то вам нужно будет перевыделять память в процессе чтения, если в потоке ввода оказалось больше символов, чем вы ожидали. Память, возвращенная из функции будет освобождена оператором delete[]. Символ переноса строки ('\n') добавлять в строку не нужно, но не забудьте, что в конце C-style строки должен быть завершающий нулевой символ. Мой код:
В чем ошибка ? Консоль зависает после перехода на новую строку.
0
|
||||||
| 12.10.2015, 09:08 | |
|
Ответы с готовыми решениями:
57
Реализация getline Реализация функций getline Delim в функции getline() |
|
1 / 1 / 0
Регистрация: 23.09.2015
Сообщений: 42
|
|||||||
| 16.10.2015, 10:01 [ТС] | |||||||
![]() Вот, что у меня получилось:
0
|
|||||||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|||||||
| 16.10.2015, 10:49 | |||||||
|
Ты все перепутал (источник с приемником, динамическую память с автоматической).
1
|
|||||||
|
1 / 1 / 0
Регистрация: 23.09.2015
Сообщений: 42
|
|||||||
| 16.10.2015, 15:32 [ТС] | |||||||
|
Сделал как вы говорили. Но теперь программа не видит переход на новую строку и поэтому требует бесконечный ввод.
0
|
|||||||
|
13 / 13 / 6
Регистрация: 29.09.2015
Сообщений: 38
|
||||||
| 16.10.2015, 15:48 | ||||||
1
|
||||||
|
1 / 1 / 0
Регистрация: 23.09.2015
Сообщений: 42
|
|||||||
| 16.10.2015, 16:20 [ТС] | |||||||
![]() Добавлено через 11 минут Многострадальная программа по работе с памятью наконец заработала. Но есть один нюанс - не проходит проверку. Пишет: Failed test #1. Time limit exceeded. Что из всего этого кушает так много времени ?
0
|
|||||||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|||||||
| 16.10.2015, 17:48 | |||||||
|
Вот для примера:
1
|
|||||||
|
1 / 1 / 0
Регистрация: 23.09.2015
Сообщений: 42
|
|||||||
| 18.10.2015, 22:37 [ТС] | |||||||
Где-то в другом месте кушается время.
0
|
|||||||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|||||||
| 18.10.2015, 23:03 | |||||||
|
JustForStudy, усложнил сильно. Проблема в этом.
Вставь туда в начало вот такие строки:
Подказка: дело в делении.
1
|
|||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||
| 18.10.2015, 23:07 | |||||||
|
выделяйте сразу же приличный резерв. это позволит расширять данные без необходимости постоянно реалокать память. а если все таки резерва не хватило - тогда при последующем реалоке выделяйте сразу в два раза больше, чем требуется. это позволит быстро (с минимальным количеством реалоков) накопить достаточный для работы резерв. вообще так поступают стандартные std::vector/std::string смотрите в сторону:
что бы можно было вообще забыть про реалоки.
1
|
|||||||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
||||||
| 18.10.2015, 23:16 | ||||||
|
JustForStudy,
Вот исправленный твой вариант. Не смотреть, если сам хочешь сделать ![]() Кликните здесь для просмотра всего текста
1
|
||||||
|
1 / 1 / 0
Регистрация: 23.09.2015
Сообщений: 42
|
||||||||||
| 18.10.2015, 23:32 [ТС] | ||||||||||
![]() Пока сделал так(все равно работает долго):
1
|
||||||||||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|||
| 18.10.2015, 23:39 | |||
![]() Добавлено через 42 секунды JustForStudy, и оставь в покое размер, что 40, что 1024 тут роли не играет. Не гадай - думай! Добавлено через 5 минут Используй оператор % для нахождения остатка.
1
|
|||
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
|
|||
| 18.10.2015, 23:43 | |||
|
1
|
|||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
||
| 18.10.2015, 23:43 | ||
|
Кроме того, у тебя там ошибка в алгоритме, которая нарушает условие задачи:
1
|
||
|
1 / 1 / 0
Регистрация: 23.09.2015
Сообщений: 42
|
||||||||
| 19.10.2015, 06:20 [ТС] | ||||||||
|
В итоге получилось:
Failed test #1. Run time error: terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc Что это значит ?
0
|
||||||||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
||
| 19.10.2015, 09:59 | ||
|
Вернись к варианту с 40 байтами.
1
|
||
|
1 / 1 / 0
Регистрация: 23.09.2015
Сообщений: 42
|
||
| 19.10.2015, 10:01 [ТС] | ||
|
Кликните здесь для просмотра всего текста
Failed test #1. Run time error:
*** glibc detected *** ./main: double free or corruption (out): 0x0000000001fce760 *** ======= Backtrace: ========= [0x46ffe2] [0x474bc7] [0x40094f] [0x4009ea] [0x4003db] [0x457e83] [0x400759] ======= Memory map: ======== 00400000-00521000 r-xp 00000000 ca:00 804455 /home/stepic/instances/master-plugins/arena/codejail-rl1a1cl8/main 00721000-00728000 rw-p 00121000 ca:00 804455 /home/stepic/instances/master-plugins/arena/codejail-rl1a1cl8/main 00728000-0073f000 rw-p 00000000 00:00 0 01fcc000-01fef000 rw-p 00000000 00:00 0 [heap] 7fd8f4258000-7fd8f4259000 rw-p 00000000 00:00 0 7fff13f8f000-7fff13fb0000 rw-p 00000000 00:00 0 [stack] 7fff13fff000-7fff14000000 r-xp 00000000 00:00 0 [vdso] ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
0
|
||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
||
| 19.10.2015, 10:12 | ||
|
В resize в качестве старого должно подаваться строго столько, сколько было выделено до этого. А у тебя это нарушается.
1
|
||
|
1 / 1 / 0
Регистрация: 23.09.2015
Сообщений: 42
|
||||||||
| 19.10.2015, 10:43 [ТС] | ||||||||
Добавлено через 3 минуты
0
|
||||||||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
||
| 19.10.2015, 10:46 | ||
|
JustForStudy, JustForStudy, Вставь вывод размеров (старые и новый) в функцию resize. Отлаживайся на маленьких приращениях, например, - 4. Отладь у себя, прежде чем постить код в систему.
Я могу сразу написать решение, но тогда ты ничему не научишься. Итак у тебя туго что-то идет. Главное - не гадай. Старайся понять что происходит. Добавлено через 2 минуты
1
|
||
| 19.10.2015, 10:46 | |
|
Какой правильный вызов у функции getline()? Третий аргумент функции sdt :: getline Отсутствуют экземпляры перегруженной функции getline
Использование функции в своей программе из своей dll Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|
Создание формы заимствованного документа
Maks 03.08.2026
Задача:
Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также
табличная часть со следующими реквизитами:
- Расчетный счет покупателя. . .
|
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача:
В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
|