![]() |
Модераторы: Poseidon |
![]() ![]() ![]() |
|
CppDevelopeR |
|
|||
![]() Experienced Expert ![]() ![]() Профиль Группа: Участник Сообщений: 390 Регистрация: 7.1.2008 Где: Moscow-City Репутация: -1 Всего: 9 |
Задача: из строки удалить все пробельные символы. Решение:
Постройте пример, на котором данная процедура будет удалять не все пробелы. Объясните, почему так происходит. Приведите правильное решение поставленной задачи. Это сообщение отредактировал(а) CppDevelopeR - 15.4.2008, 19:01 |
|||
|
||||
Rodman |
|
|||
CIO ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 6144 Регистрация: 7.5.2006 Где: Ukraine ⇛ Kyiv ci ty Репутация: 26 Всего: 122 |
|
|||
|
||||
CppDevelopeR |
|
|||
![]() Experienced Expert ![]() ![]() Профиль Группа: Участник Сообщений: 390 Регистрация: 7.1.2008 Где: Moscow-City Репутация: -1 Всего: 9 |
а мона обьяснит, пасему тот код не работает? мне ето нуна!
|
|||
|
||||
CppDevelopeR |
|
|||
![]() Experienced Expert ![]() ![]() Профиль Группа: Участник Сообщений: 390 Регистрация: 7.1.2008 Где: Moscow-City Репутация: -1 Всего: 9 |
Прав ли я, что тут удаляюца пробелы тока в 1 строке в файле?
|
|||
|
||||
ama_kid |
|
|||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 16 Всего: 95 |
Потому что удаляя один символ, ты сдвигаешь остальные символы влево, следовательно если будут два подряд пробела - то первый удалится, а следующий пропустится, т.к. перейдет на место уже проверенного символа и на следующем шаге цикл пойдет через один символ...
-------------------- самурай без меча подобен самураю с мечом, но только без меча |
|||
|
||||
THandle |
|
||||||||
![]() Хранитель Клуба ![]() Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 30 Всего: 372 |
Файлов я тут не вижу ![]() Вся проблема в том, что в данном коде:
после удаления символа длина строки уменьшается и соответственно в следующий раз будет проверяться не тот символ который должен бы проверяться, а следующий. То есть при парных пробелах будет удалятся только один из них. Вот пример:
идет наш цикл: i длина строки проверяемый символ удаляем? 1 8 a нет 2 8 пробел да 3 7 пробел(см. объяснение 1) да 4 6 пробел(см. объяснение 2) да 5 5 a нет Объяснение 1. Так как мы удалили пробел стоящий перед символом n, на позицию s[2] встал символ n, а позицию s[3] занял идущий за ним пробел. Объяснение 2. То же самое, только другой символ. На 5 итерации пробел уже пропускается, так как смещается на уже пройденную циклом позицию. Далее, так как значение от и до цикла for рассчитываются только один раз при запуске цикла, наш цикл прогоняет уже не существующие элементы строки. Тут как раз спасает цикл for x downto y do... Я бы лично оформил данный код вообще без delete.
|
||||||||
|
|||||||||
![]() ![]() ![]() |
Правила форума "Центр помощи" | |
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Центр помощи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |