singlepost

Pascal (задача про строковые процедуры и функции 1) << На главную или назад  

удалить из текста стоящие рядом одинаковые буквы.
вот код проги

program del_bukv;
uses crt;
var st:string;i:integer;
Begin
clrscr;
textcolor(11);
writeln('введите слово');
readln(st); i:=1;
for i:=1 to length(st) do
if st[i]=st[i+1] then delete(st,i,2);
writeln(st);
readln
End.

Вся беда в том что, она работает правильно только если 2 одинаковые буквы(
а как сделать для общего случаю я не знаю.
Подскажите пожалуйста

35 ответов в теме “Pascal (задача про строковые процедуры и функции 1)”

  1. 7
    Александр Чигринец ответил:

    А потому, что предыдущий if проверил ближайшие два:
    if st[i]=st[i+1] then begin …

  2. 6
    Сергей Владимирович ответил:

    Спасибо, теперь понял)

  3. 5
    Сергей Владимирович ответил:

    а почему с третьего?

  4. 4
    Александр Чигринец ответил:

    а что делает
    j:=2;
    while st[i]=st[i+j]do inc(j);
    ————————————————–
    Считает: сколько одинаковых символов подряд стоит в строке. Причём начиная с третьего.

  5. 3
    Сергей Владимирович ответил:

    спасибо!
    а что делает
    j:=2;
    while st[i]=st[i+j]do inc(j);

    пока *какое условие* выполняется?

  6. 2
    Сергей Старовой ответил:

    while ((i+j)<=length(st)) and (st[i]=st[i+j]) do inc(j);

  7. 1
    Максим Двойнишников ответил:

    Вообще-то лучше использовать не строку, а массив символов. А корректировка данной такая:

    var st:string;i,j:integer;
    Begin
    readln(st);i:=1;
    while i<length(st)do
    if st[i]=st[i+1] then begin
    j:=2;
    while st[i]=st[i+j]do inc(j);
    delete(st,i,j);
    end else inc(i);
    writeln(st);
    End.

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.