Помощь - Поиск - Пользователи - Календарь
Полная версия: Удвоить кол-во элементов в строке
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Анна
Задание:
Удалить все цифры и удвоить символы '+','-','*','/'. Вывести получившуюся строку и кол-во удалённых символов.

Вот, что получилось:

uses crt;
const dva = ['+','-','*','/'];
del = ['0'..'9'];
var
s : string;
t, i : byte;
begin
clrscr;
write ('Enter String: ');
readln(s);
i:=1;
while (i<=length(s)) do begin

if s[i] in del then delete(s,i,1) else inc(i); end;
if s[i] in dva then begin
for t := length(s)+1 downto i-1 do s[i] := s[i-1] ;
s[i+1] := s[i]; inc(i) end;


writeln (s); readln;
end.


Цифры удаляет, а вот знаки не дублирует sad.gif
volvo
А если вот так:
...
i:=1;

while (i<=length(s)) do
if s[i] in del then delete(s,i,1)
else begin
if s[i] in dva then begin
insert(s[i], s, i);
inc(i);
end;
inc(i);
end;
...

?
Ozzя
Когда удаляешь символ,
то меняется
1. длина строки
2. номер текущего символа уменьшается на один
у тебя это не отрабатывается
Лучше не i+1, а Insert

Volvo, ты вообще уходишь отсюда? rolleyes.gif


klem4 :
Это что за провокации ?
Он сам решит что ему делать без твоих подсказок.
Анна
Блин, не могу понять, как включить счётчик на удалённые элементы? sad.gif sad.gif sad.gif
volvo
Если использовала мою подсказку, то вот так:

delete_count := 0;
...
if s[i] in del then begin { изменяешь одно действие на 2: }
delete(s,i,1); inc(delete_count);
end;
...
Анна
Вот, что получилось, отказывается работать sad.gif, блин столько уже всего перепробовала ...:

uses crt;

const dva = ['+','-','*','/'];

del = ['0'..'9'];

var

s : string;

i, j : integer;

begin

clrscr;

write ('Enter String: ');

readln(s);

i:=1;
j:=0;


while (i<=length(s)) do

if s[i] in del then begin delete(s,i,1); inc (j); end;


if s[i] in dva then begin

insert(s[i], s, i);

inc(i);

end;

inc(i);




writeln (s); readln;

end.
Анна
Разобралась ...

                     uses crt;

const dva = ['+','-','*','/'];

del = ['0'..'9'];

var

s : string;

g, i : integer;

begin

clrscr;

write ('Enter String: ');

readln(s);
g:=0;
i:=1;


while (i<=length(s)) do begin
if s[i] in del then inc(G);
if s[i] in del then delete(s,i,1)

else begin

if s[i] in dva then begin

insert(s[i], s, i);

inc(i);

end;

inc(i);

end;
end;

writeln (s);
writeln (g);
readln;

end.


Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.