|
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
|
||||||
Преобразовать текст, удалив все ‘*’ и повторив дважды каждый символ, отличный от ‘*’30.12.2010, 21:45. Показов 4442. Ответов 29
Метки нет (Все метки)
всем привет
народ помогите разобраться в чем ошибка, программа почему то печатает левое при наборе 3 и более строк вот задание данное мне Ввести массив строк символов (текст), которые могут содержать символы ‘*’. Преобразовать текст, удалив все ‘*’ и повторив дважды каждый символ, отличный от ‘*’.
Добавлено через 3 часа 24 минуты разве никто не знает в чем причина? что не так в моем коде то??
0
|
||||||
| 30.12.2010, 21:45 | |
|
Ответы с готовыми решениями:
29
Дана строка. Преобразовать ее, удалив каждый символ (*) и повторив каждый символ, отличный от (*) Преобразовать строку, удалив каждый символ * и повторив каждый символ, отличный от * |
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|||||||||||
| 31.12.2010, 20:41 | |||||||||||
|
Вот твой код
адресом памяти из восьми байт. Ведь
В последующих четырёх неизвестно что. Это круто, наверное. Заносим в массив char* значение и четыре байта к массиву приплюсовываем. Чтобы были. И да: сперва выделяем память. Потом инициализируем. С утра так было. Выделяет память (В ДАННОМ КОДЕ под указатели на char) функция realloc Инициализирует её (опять же в данном коде malloc ). ПРивет И да: при использовании realloc КРАЙНЕ НЕ СОВЕТУЮ освобождать память free. Если кто спросит почему- отвечу. Напильнику не беспокоиться. Он пусть освобождает. Он, наверное щас занят написанием РАБОЧЕГО кода, а то языком трепать все могут. Ну и соответственнто Добавлено через 3 минуты Короче, жду данных, на который мой код спотыкается.
0
|
|||||||||||
|
481 / 119 / 17
Регистрация: 30.09.2010
Сообщений: 473
|
||||||||||
| 31.12.2010, 22:06 | ||||||||||
Не очень кузяво, сам бы я написал по другому, но ТС хочет разобраться в ошибках в своем коде, вот я и внес минимальные изменения с сохранением исходной концепции. Добавлено через 12 минут
0
|
||||||||||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 31.12.2010, 22:55 | |
|
kravam, эммм... Я не особо вникал в код... Но из моего опыта malloc выделяет память (т.е. берёт память из кучи и возвращает указатель типа void на её начало), а realloc перевыделяет память, выделенную ранее с помощью malloc или calloc. Освободить выделенную (или перевыделенную) память можно с помощью free.
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
||||||||||||
| 31.12.2010, 23:38 | ||||||||||||
|
Дело в том, что если Вы посмотрите внимательно, то увидите, в каждом проходе malloc выделяет память под массив символов.
Ну то есть введено, допустим "asdfg", вот под этот массив выделена память и адрес "a" зенесён в txt[i] Угу? А теперь ВНИМАТЕЛЬНО смотрим, что делает realloc. Она ПЕРЕВЫДЕЛЯЕТ но не под массив сисволов "asdfg", отнюдь. Она перевыделяет память под МАССИВ УКАЗАТЕЛЕЙ НА НИХ txt=(char**)realloc(txt,(i+1)*sizeof(char*)); Просто? А теперь- если они выделяют память под разные элементы, порядок следования malloc realloc аннулируется Смотрим дальше. По-хорошему при первом проходе необходимо было выделить место под первый указатель Ну то есть так txt=(char**)malloc(txt,(i+1)*sizeof(char*)); ... потом этому указателю присваиваем адрес len+1 элементов, да не абы каких, а первой строки txt[i]=(char*)malloc((len+1)*sizeof(char)); А при втором третьем и так делее проходах (заменяем malloc на realloc) txt=(char**)realloc(txt,(i+1)*sizeof(char*)); ... txt[i]=(char*)malloc((len+1)*sizeof(char)); Но я уж не стал усложнят это дело, если при первом проходе канает запись txt=(char**)realloc(txt,(i+1)*sizeof(char*)); ... txt[i]=(char*)malloc((len+1)*sizeof(char)); ТО пусть так и останется Ещё раз: malloc и realloc выделяют память под разные элементы. //+++++++++++++++++++++++++++++++++++++++ Напильник, я свои ошибки знаю и вижу. Пусть оно остаётся как есть. Ну так чё, кодер который не быдло? Выдашь на гора свой код или слив засчитан? Будем лепить левые отмазки типа "я умный и потому ни хрена давать не буду"? И я не говорил, что память нужно освобождать не free. Ну, кому надо, тот переспросит. А ты освобождай давай. Добавлено через 8 минут silent_1991,задумайтесь, стали бы вы инициализировать память, если она НЕ ВЫДЕЛЕНА? Автор возложил миссию выделения памяти на realloc (типа двух зайцев убивает сразу- и даные сохраняет и память увеличивает). Наверное, это не совсем грамотно. Но тем не менее- значит она и должна идти перед malloc, которая её инициализирует (загоняет туда строку). Короче, всё просто. Мяч круглый, поле квадратное. Пусть победит сильнейший. С Новым Годом! Добавлено через 11 минут Хотя прошу прощения, тс именно при первом проходе (до него) и использовал malloc для размещения указателя на первую строку
0
|
||||||||||||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 01.01.2011, 00:27 | |
|
kravam, ага, сейчас глянул код, понял, в чём суть (раньше его вообще не смотрел, основывался только на вашем с Напильнегом споре). Память выделяется под указатель на строку (первую строку) до цикла, а затем, в цикле, выделяется и забивается память, указатель на которую был выделен ранее (на первой итерации - тот, что выделен до цикла, далее - тот, что перевыделен с помощью realloc). Так что с порядком следования вроде всё ок (сначала выделяется указатель на строку, затем выделяется и забивается эта строка и запасливо выделяется указатель на следующую строку). Единственное, я бы делал не так, я бы выделял кусок памяти под массив указателей на строки (скажем, штук под 10), а потом, при необходимости, увеличивал бы ранее выделенную память вдвое (собственно, стандартный подход).
На счёт освобождения памяти - так естественно сначала надо освободить память, выделенную под строки (с помощью free), а потом память, выделенную под массив указателей на них (с помощью того же free). Другого способа освобождения памяти, выделенной так, как выделяет ТС (да и любым другим способом) я не знаю... А вообще, если я пишу глупости, у меня есть оправдание - сегодня Новый год ! Всех с праздником!!!
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
||
| 01.01.2011, 01:03 | ||
|
0
|
||
|
481 / 119 / 17
Регистрация: 30.09.2010
Сообщений: 473
|
|||
| 01.01.2011, 02:29 | |||
|
0
|
|||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|
| 01.01.2011, 09:37 | |
|
см. подпись
1
|
|
|
481 / 119 / 17
Регистрация: 30.09.2010
Сообщений: 473
|
||
| 05.01.2011, 21:40 | ||
|
Конечно же, повесить на оппонента ярлык - спор то в чистую просран! См. подпись.
0
|
||
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
| 05.01.2011, 21:59 | |
|
Во избежание флуда закрываю тему.
0
|
|
| 05.01.2011, 21:59 | |
|
Дана строка преобразовать ее удалив каждый символ * и повторив каждый символ отличный от символа *.
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Нейтральные знания ..., ... чистая наука. Пока что-то проходит модерацию на Хабре, стоит развить мысль ...
Hrethgir 20.07.2026
К таким радикальным взглядам я конечно в той публикации не приходил, но чтобы скоротать вечер, решил углубиться немного.
1. Почему показания термометра заряжены целью?
Цель заложена в самом. . .
|
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
|
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
|
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения.
https:/ / habr. com/ ru/ sandbox/ 295048/
По ссылке 403. Не очень информативно такую ссылку постить.
Запись от Usaga размещена Сегодня в 06:46 . . .
|
|
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
|
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано
Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
|
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано
Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
|
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0)
Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона
Уважаемые коллеги!
В продолжение. . .
|