Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Повторяющийся символ в строке

Автор: root 25.11.2003 14:39

Необходимо удалить из введенной строки повторяющиеся 2 раза подряд служебные символы, т.е. если введено "abcd//efg", то в итоге должно быть "abcdefg"

Автор: trminator 25.11.2003 14:51

А какие символы считать служебными? Есть их полный список?
А то напрашивается тупое решение:

Код

while pos('//', mystr) <> 0 do
 delete(mystr, pos('//', mystr), 2)

И так для всех "служебных символов". Для простоты можно оформить удаление двух подряд идущих заданных символов в виде процедуры (типа del2('/') )

Автор: root 25.11.2003 15:02

служебными...имеются в виду все символы на клаве, кроме цифр и букв, пробел - тоже сл. символ. строчка может быть и такая "hfhhf..hfsj//njkhn**" , т.е. не имеет смысла писать код под каждый символ

Автор: GLuk 29.11.2003 15:22

Вот попробуй, это отнюдь не самый лучший вариант:

Код

Program DeleteOfficialSymbols;
Uses
   Crt;
Const
    S:String = 'affffb&&&cdefg  ..//hheudsloi--((**jksla8ew%%';
Var
  l:Byte;
Begin
    ClrScr;
    Randomize;
    For l:=2 to Length(S)-1 do
    If (S[l]=S[l+1]) or (S[l-1]=S[l]) then
    Case Ord(S[l]) of
    1..47,58..64,91..96,123..127,176..223,240..254:S[l]:=#255;
    end;
    While Pos(#255,S)<>0 do Delete(S,Pos(#255,S),1);
    WriteLn(S);
End.