Задача такая: заменить каждую группу повторяющихся символов в строке одним символом (строка состоит из букв, отсортированных по алфавиту). я написала так: for i:=1 to ord(s[0]) do if a[i]=a[i+1] then delete (s,i,1) , но почему-то не работает
volvo
17.12.2006 0:04
Ты при Delete изменяешь длину строки, так? А цикл будет продолжаться до той длины строки, которая была ПЕРЕД циклом, так что даже если бы это и работало - доверять результату нельзя; я уж не говорю о том, что Ord(s[0]) вообще для меня не существует, потому что моим компилятором не признается...
Malice
17.12.2006 0:09
Поменяй if a[i]=a[i+1] then на while (s[i]=s[i+1]) and (I<length(s)) do Должно работать.
Katrinka
17.12.2006 1:05
Я так написала, но все равно работает неправильно...
Malice
17.12.2006 1:30
Приведи полный код, что вводишь и что получается.
Katrinka
17.12.2006 3:02
procedure delete_char(var s:string); var i,j,n:integer; s1:string; begin
while (a[i]=a[i+1]) and (a[i]<length(s)) then delete(s,i,1)
end;
Выводится без изменения
Malice
17.12.2006 3:17
А что такое a[i], если строка в s ?! Да и вообще, найди в этих строках отличия: while (a[i]=a[i+1]) and (a[i]<length(s)) then while (s[i]=s[i+1]) and (I<length(s)) do еще вопросы есть ?
Katrinka
17.12.2006 3:20
Это понятно, это я в текстовом редакторе опечаталась.В паскале написано правильно и не работает.
Malice
17.12.2006 3:31
Проблемы с редактором- прикрепи файл.
Katrinka
17.12.2006 3:37
Так выглядит код: procedure delete_char(var s:string); var i:integer; s1:string; begin while (s[i]=s[i+1])and(s[i]<length(s)) do begin delete(s,i,1); i:=i+1 end; end;
Michael_Rybak
17.12.2006 3:44
Во-первых, переменная i ничему не равна в начале. Во-вторых, лучше делать не так; лучше пройтись циклом for, и генерить вторую строку, добавляя в нее символы, отличающиеся от предыдущих (if (i = 1) or (s[i - 1] <> s[i]) then s1 := s1 + s[i]). В-третьих, если уже хочешь так, то просто на бумажке выполни несколько шагов для строки AABBCC и увидишь, что не так.
Malice
17.12.2006 3:46
Издеваешься ? В своем первом посте я сказал что на что поменять, на всякий случай приведу как оно должно выглядеть:
procedure delete_char(var s:string); var i:integer; begin for i:=1 to ord(s[0]) do while (s[i]=s[i+1]) and (I<length(s)) do delete (s,i,1); end;
Если не получится переписать, я могу прикрепить файл, надо ?
Katrinka
17.12.2006 3:54
Спасибо, заработало. Я изначально так и писала, только в тексте основной программы не запусила процедуру...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.