Составьте программу удаления символов «А» стоящих на четных местах в полученной от пользователя строке.
Bokul
19.05.2006 23:33
А какие могут быть проблемы?
Код
var s : строка; i: byte; Begin Берем строку(s); от i:=1 до длина(s) делаем если (i = четное) и (s[i] = 'А') то удаляем(со строки s, в позиции i, 1 элемент); выводим результат; конец.
Что не можешь сделать сам?
volvo
19.05.2006 23:50
Цитата(Bokul @ 19.05.2006 19:33)
А какие могут быть проблемы?
А очень простые
Вот тебе пример:
S := 'fAfAfA';
По строке надо от конца в начало проходить, иначе твой алгоритм идет лесом - при удалении символа в позиции №2 все остальные символы сдвинутся на 1 вправо, и обе оставшиеся буквы 'A' не будут удалены, хотя изначально находились именно на четных позициях...
Кстати, ты можешь в своем алгоритме получить еще одну проблему - длина строки при использовании цикла For вычислится перед началом цикла, и то, что ты будешь изменять длину строки при удалении элементов никак не будет замечено. Результат - возможен выход за пределы строки.
Bokul
19.05.2006 23:56
Спасибо Volvo
Коректируем
Код
var s : строка; i,len: byte; Begin Берем строку(s); len:=длина(s); от i:=len до 1 делаем {роль "до" - downto} если (i = четное) и (s[i] = 'А') то удаляем(со строки s, в позиции i, 1 элемент); выводим результат; конец.
klem4
20.05.2006 22:47
И что ты изменил ? помоему ничего ... кроме направления просмотра строки.
Bokul
20.05.2006 23:16
Цитата
И что ты изменил ? помоему ничего ... кроме направления просмотра строки.
Не только, во-первых, тепер длина строки вычисляется не в цикле. А во-вторых, больше ничего не надо изменять, все и так работает
Вот код этого алгоритма:
Код
var s:string; i,len:byte; begin writeln('Enter string'); readln(s); len:=length(s); for i:=len downto 1 do if ((i mod 2)=0) and (s[i]='A') then delete(s,i,1); writeln('Result :',s); readln; end.
Malice
20.05.2006 23:19
Цитата(klem4 @ 20.05.2006 18:47)
И что ты изменил ? помоему ничего ... кроме направления просмотра строки.
Точно подмечено Этого недостаточно ?
2Bokul: Length теперь и в for можно ставить - следуя в обратном направлении за пределы строки не вылетишь.
klem4
20.05.2006 23:55
Да я погорячился по ходу, извиняюсь.
Я бы решал так
i := 2; while (i <= length(s)) do if s[i] = 'A' then begin delete(s, i, 1); inc(i); end else inc(i, 2);
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.