![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Ripper |
|
|||
![]() Lonely soul... ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 30.6.2004 Где: г. Москва Репутация: нет Всего: 23 |
Я уже писал тут задачу, когда нужно было центрировать строку. Сейчас делаю тоже самое для списков, и вот проблема:
Вот этот код запускаю в DevC++ с помощью debug. - работает. Без debug не работает, как и в VC++ не работает. Я уже запарился разрисовывать бумагу с этими указателями Нужно просто сделать например из " 11 3 4 4 3 " -> "11 3 4 4 3" т.е. удалить пробелы (оставить 1 между символами). Что не так?:( ф-ии создания списков взял с семинарской тетради, хотя впринципе везде должно работать и ошибка видимо в DelSpaces -------------------- "Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Это сообщение отредактировал(а) archimed7592 - 16.10.2007, 22:11 -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| Ripper |
|
|||
![]() Lonely soul... ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 30.6.2004 Где: г. Москва Репутация: нет Всего: 23 |
Это что) Нам запрещено использовать библиотечные ф-ии да и я таких незнаю.
Я что то совсем не понял смысла этого кода -------------------- "Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
Проблема в том, что в ф-ии DelSpaces происходит использование указателя last до его инициализации, при первом его использовании там находится мусор:
|
|||
|
||||
| Ripper |
|
|||
![]() Lonely soul... ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 30.6.2004 Где: г. Москва Репутация: нет Всего: 23 |
Первый раз этот блок не работает, т.к. to указывает на null, а потом он уже инициализируется
-------------------- "Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Ripper, тебе обязательно реализовывать удаление через список?
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| Ripper |
|
|||
![]() Lonely soul... ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 30.6.2004 Где: г. Москва Репутация: нет Всего: 23 |
Ага. Там все должно быть через списки...
-------------------- "Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом |
|||
|
||||
| Lazin |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
ты в этом уверен?
потом ты передаешь ф-ии CreateList указатель на buf - который содержит всякий мусор, нужно этот масив инициализировать.
вот этот код работать не будет, если массив str не содержит строку оканчивающуюся нулем:
вернее будет, но при этом будет вылазить за границу массива |
||||||||
|
|||||||||
| Ripper |
|
|||
![]() Lonely soul... ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 30.6.2004 Где: г. Москва Репутация: нет Всего: 23 |
Что-то вообще не понимаю :(
что значит char buf[80]="";? Если я пишу char gg[80]; значит gg указатель но первый элемент и Item *HeadOfBuf = CreateList(buf); работает. Но не понимаю насчет инициализации. И как сделать так чтобы это все дело заработало? -------------------- "Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом |
|||
|
||||
| akizelokro |
|
||||||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Lazin прав. На VC++ вырубается. И дальше ни в какую. Сделай Item * last = new Item;
Первая (не столь критичная) ошибка возникает еще раньше, когда ты пытаешься
заюзать буфер buf, в котором у тебя непонятно что. если тебе нужны два списка с одинаковым количеством элементов, то тогда уже хотя напиши перед этим
И еще проблема, что ты используешь неоптимальный алгоритм. У тебя есть список. Сделай по нему "пробежку"
-------------------- a = a + b; b = a - b; a = a - b; |
||||||
|
|||||||
| Lazin |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
Ripper, когда ты пишешь
то выделяется 80 байт под массив, в стеке. Изначально в этом массиве может быть все что угодно. И если ты вызовешь к примеру strlen(buf); может произойти ошибка доступа, из-за того, что buf может вообще не содержать '\0', а может и не произойти. Можно сделать так
и после этого все ф-ии для работы со строками будут считать что там строка нулевой длины, в том числе и твои ф-ии. |
||||
|
|||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Смысл последнего куска, что ты работаешь с одним списком, проверяешь текущий элемент на наличие пробела, если есть, тут же смотришь на наличие пробела у следующего элемента. Если там пробел (два пробела подряд), то следующий элемент удаляешь (что я забыл сделать, ну так поправят), а указатель из удаляемего вытаскиваешь в текущий. И так до конца списка.
Не надо определять формальные аргументы с типом Item* &, это не есть хорошо. Все я исправлять не стал, но, попробуй, должно сработать. -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| Ripper |
|
|||
![]() Lonely soul... ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 30.6.2004 Где: г. Москва Репутация: нет Всего: 23 |
О..эм... спасибо вроде работает.
Да, тяжело познание си Добавлено через 1 минуту и 23 секунды Это я к варианту Lazina akizelokro, твой ещё не смотрел... но вроде тока добавив buf[0]='\0' заработало, но щас и твой посмотрю Добавлено через 4 минуты и 9 секунд p.s. stdafx.h незя использовать. а что это? Добавлено через 5 минут и 45 секунд работает, только 1 строчку убрать надо и там мелкие опечатки. + первый пробел не удаляется. Блин, щас мозг взорвется..) -------------------- "Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом |
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Угу, буквально воспринял задачу, что надо два и более подряд пробелов сводить к одному
<stdafx.h> - стандартный Виндовый хидер для консоли, удаляй его из своего кода. Это сообщение отредактировал(а) akizelokro - 17.10.2007, 13:00 -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| Ripper |
|
|||
![]() Lonely soul... ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 30.6.2004 Где: г. Москва Репутация: нет Всего: 23 |
просто мне ещё удобней вводить 3 массива т.к. потом нужно будет центрировать полученную строку. Покранемере при работе с массивами строк так было удобно. 1 массив вводит пользователь. 2 массив это когда строка имеет корректный вид. третий массив это строка размером 80 символов где по бокам равное кол-во пробелов а в середине 2 массив
Тем неменее спасибо всем! -------------------- "Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |