| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > Нужна помощ с процедурой |
| Автор: BTCY 23.6.2008, 15:52 |
| Здравствуйте. ОЧЕНЬ Нужна помощ. Такая задача, написать ПРОЦЕДУРУ которая у строки удаляет все пробелы в начале строки и в конце. PS Прошу ещё разъяснить ваши действия. |
| Автор: VanHelsing 23.6.2008, 15:58 |
| Считываете строку, и посимвольно (с начала и с конца строки) проверяете является символ пробелом или нет. Запоминаете позицию где символ не равен пробелу и выделяет в эту строку. |
| Автор: BTCY 23.6.2008, 16:01 | ||
Плиз,можеш это на примере кода всё мне разжевать? Так лучше разберусь. |
| Автор: Rrader 23.6.2008, 16:05 |
| Посмотри, как в VCL сделаны функции TrimLeft И TrimRight |
| Автор: morpheyushka 23.6.2008, 16:20 | ||
Что бы удалить пробелы сначала и сконца строки одновременно просто Trim
и всё Не забудь закрыть тему! |
| Автор: BTCY 23.6.2008, 16:32 | ||||
Мне TRIM нельзя использовать =( |
| Автор: Rrader 23.6.2008, 16:32 |
| morpheyushka, если есть пробелы в середине, то и они удалятся. Я думаю, автору не нужно это BTCY, скажи, как тебе надо? Только по краям или все? |
| Автор: Rrader 23.6.2008, 16:39 |
| Мой глюк, извиняюсь |
| Автор: BTCY 23.6.2008, 16:39 | ||
Да,мне нужно толька по краям. Чесно говоря я сам не понял что отменя требуют, я процитировал в первом посте как препод мне сформулировал задачу. Но вроде он говорил трим не использовать. |
| Автор: morpheyushka 23.6.2008, 16:43 |
| Значит он дал тебе задание - что бы ты сам это реализовал)) |
| Автор: BTCY 23.6.2008, 16:50 | ||
Каким способом? я непонимаю =( |
| Автор: ama_kid 23.6.2008, 17:15 | ||
Навскидку:
|
| Автор: BTCY 23.6.2008, 17:25 | ||||
Спасибо. Это процедура? Или всётаки функция? Добавлено через 3 минуты и 8 секунд Кто нибуть как нибуть может показать как сделаны функции TrimLeft И TrimRight ? А то что-то я у себя их в VCL не нахожу o_O |
| Автор: morpheyushka 23.6.2008, 17:40 | ||
тебе же уважаемый ama_kid дал исходник функции...одна ее половина (первая) делает TrimLeft, а вторая - последняя - TrimRight. Просто нужно обратно будет развернуть строку |
| Автор: BTCY 23.6.2008, 17:54 | ||||
Можете расписать там по строчкам мне объяснения? Мне не только принести код надо будет,но и объяснить его =( За одно может строки развернете про которые говорили? а то я вообще не понимаю) |
| Автор: ama_kid 23.6.2008, 19:01 | ||
| В данном случае - это функция. Если тебе надо именно процедурой (а ты понимаешь разницу между этими понятиями?) - тогда просто заголовок немного переделать надо... Разворачивать вроде ничего не надо
Разбирайся и спрашивай... |
| Автор: BTCY 23.6.2008, 20:04 |
| Мега спасибо!!! Мне нужна процедура. Что там вверху заменить и на что? |
| Автор: ama_kid 23.6.2008, 20:31 | ||
примерно так:
|
| Автор: Beltar 24.6.2008, 07:18 | ||||
Вот еще простейший вариант, чуть менее громоздкий, всего 2 цикла и все-таки
для меня выглядит немного странно, преподы дают, конечно, глупости, но если уж мутить процедуру, то пусть уж она изменяет переменную. Однако при использовании этого простейшего варианта убедись, что включена короткая схема вычисления лог. выражений, иначе можешь AV схлопотать. PS А вместо var Result логичнее out Result указать, но это уже тонкости, которые студенту не нужны. |
| Автор: ama_kid 24.6.2008, 07:28 | ||||
Я конечно дал такое объявление функции навскидку (чтобы не изменять тело процедуры, у меня нет сейчас дельфи под рукой), но поясни плз данный тезис, я что-то его не догнал. В каком месте там может быть AV? |
| Автор: Beltar 24.6.2008, 08:42 | ||||||
Признаю свою неправоту. Оптимизировать не получилось, абыдна.
Когда i станет больше длины, S[i] будет выходом за границу строки. В твоем варианте я проблем не вижу. |
| Автор: ama_kid 24.6.2008, 08:58 |
| Когда i станет больше длины строки - сработает условие (i<=L) и до условия (S[i]<>' ') не дойдет, так что "выхода" быть не должно. Добавлено через 1 минуту и 52 секунды Оптимизировать там можно раза в два по объему кода, но пусть топиккастер сам попробует подумать на эту тему |
| Автор: morpheyushka 24.6.2008, 09:16 |
| по моему тему уже можно закрывать...лучше бы это сделал модератор, а то от хозяина темы не дождёшься |
| Автор: Beltar 24.6.2008, 09:22 | ||
Именно. Это и называется вычислением по короткой схеме, но в опциях проекта в разделе Compiler можно включить полное вычисление. Конечно, я знаю, что там стоит по умолчанию, но думал пусть топикстартер попугается. Вопросов позадает. Впрочем бояться ему оказывается нечего, :( я забыл, что в конце строки еще нолик есть и S[Length(S)+1] как раз на него и покажет. |
| Автор: BTCY 24.6.2008, 14:15 |
| Всем БОЛЬШОЕ спасибо кто принимал участие в дискуссии!!! Отдельное МЕГА спасибо ama_kid ! Сдал на 5 эту задачу. |