0 / 0 / 0
Регистрация: 22.01.2016
Сообщений: 19
1

Удалить символы из заданной строки

13.06.2016, 03:34. Показов 7420. Ответов 9

Студворк — интернет-сервис помощи студентам
Дана строка s, содержащая менее чем 256 символов. Удалить из данной последовательности символов все группы букв вида или. Использовать стандартные процедуры и функции в действиях над строками.

Pascal
1
2
3
4
5
6
7
8
9
var
s:string;
begin
readln(s);
while pos('или',s)<>0 do
delete (s,pos('или',s),3);
writeln(s);
readln;
end.
Эта программа работает, но она удаляет слово "или" не из данной строки, а до тех пор пока его вообще не будет.

Например если мы введем строку : "Аиилилилии."
после удаления двух "или" образуется еще одно или и программа его тоже удалит, как сделать так чтобы "или" удалялось только из исходной строки и при образовании нового слова "или" программа его не трогала, так как по условию надо удалить именно из данной строки.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.06.2016, 03:34
Ответы с готовыми решениями:

Строка: Удалить все символы «а» заданной строки...
Дана строка. Удалить все символы «а».

Удалить из заданной символьной строки подряд идущие одинаковые символы
Задание: Написать программу, которая удаляет из заданной символьной строки подряд идущие одинаковые...

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

Если длина строки больше заданной, отбросить первые символы, иначе в её начало добавить символы "."
Дано целое число N (N&gt;0) и строка S.Преобразовать строку S в строку длины N следующим образом:если...

9
Почетный модератор
64288 / 47587 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
13.06.2016, 10:07 2
Удаляйте не с начала, а с конца.
Pascal
1
2
for i:=length(s) downto 1 do
if copy(s,i,3)='или' then delete(s,i,3);
0
0 / 0 / 0
Регистрация: 22.01.2016
Сообщений: 19
13.06.2016, 16:30  [ТС] 3
Delphi
1
2
3
4
5
6
7
8
9
10
var
i:integer;
s:string;
begin
readln(s);
for i:=length(s)downto 1 do
if copy(s,i,3)='или' then delete(s,i,3);
writeln(s);
readln;
end.

Написал строку: Аиилилилии.
Вывело в итоге: Аиил. хотя должно вывести Аили.
Если в строке опять образуется еще одно "или" программа все равно его удаляет
0
Почетный модератор
64288 / 47587 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
13.06.2016, 16:52 4
А так?
Pascal
1
2
3
4
5
6
7
8
9
i:=1;
while i<length(s) do
if copy(s,i,3)='или' then
 begin
  i:=i+3;
  delete(s,i-3,3);
  i:=i-2;
 end
else inc(i);
Добавлено через 3 минуты
Или строка 7 i:=i-3, не догоню.
0
0 / 0 / 0
Регистрация: 22.01.2016
Сообщений: 19
13.06.2016, 17:18  [ТС] 5
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var
i:integer;
s:string;
i:=1;
begin;
while i<length(s) do
if copy(s,i,3)='или' then
 begin
  i:=i+3;
  delete(s,i-3,3);
  i:=i-2;
  end
else inc(i);
end.
Пишет: повторно объявленный идентификатор i и ошибку выдает
0
Почетный модератор
64288 / 47587 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
13.06.2016, 17:22 6
А мозг включить или нету?
Нахрена написал i:=1; перед begin?
0
0 / 0 / 0
Регистрация: 22.01.2016
Сообщений: 19
13.06.2016, 17:32  [ТС] 7
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var
i:integer;
s:string;
begin;
Writeln('Исходная строка');
Readln(s);
i:=1;
while i<length(s) do
if copy(s,i,3)='или' then
 begin
  i:=i+3;
  delete(s,i-3,3);
  i:=i-2;
  end
else inc(i);
Writeln(s);
end.
Все, программа работает, теперь можете объяснить пожалуйста как этот цикл работает, а то преподаватель спросит, а я объяснить не смогу, вот особенно эти i+3,i-2
0
Почетный модератор
64288 / 47587 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
13.06.2016, 18:03 8
Pascal
1
2
3
4
5
6
7
8
9
i:=1; //первый символ
while i<length(s) do//пока не конец строки-1
if copy(s,i,3)='или' then //если 3 символа с позиции i = или
 begin
  i:=i+3;//перешагнем через них
  delete(s,i-3,3); //удалим их
  i:=i-3;//уменьшим индекс на 3(все таки правильно 3), встанем на следующий символ за удаленными
  end
else inc(i);//если не или то дальше
1
0 / 0 / 0
Регистрация: 22.01.2016
Сообщений: 19
16.06.2016, 19:18  [ТС] 9
Puporev, а зачем мы перешагиваем через слово "или" а потом его удаляем, почему нельзя удалить его сразу?
0
Почетный модератор
64288 / 47587 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
16.06.2016, 19:24 10
А хрен его знает,ты тогда меня достал, ну напиши так
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
var
i:integer;
s:string;
begin;
Writeln('Исходная строка');
Readln(s);
i:=1;
while i<length(s) do
if copy(s,i,3)='или' then delete(s,i-3,3)
else inc(i);
Writeln(s);
end.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.06.2016, 19:24
Помогаю со студенческими работами здесь

Удалить из строки ее часть с заданной позиции и заданной длины
Ввести с клавиатуры строку. Удалить из этой строки ее часть с заданной позиции и заданной длины....

Удалить часть строки заданной длины с заданной позиции
Ввести с клавиатуры строку. Удалить из этой строки ее часть с заданной позиции и заданной длины....

Даны две строки. Из множества символов первой строки удалить символы содержащиеся во второй строке.
составить программу для решения задач: 6. Даны две строки. Из множества символов первой строки...

Удалить символы строки от I до N
Удалить все символы от I до N Добавлено через 6 минут Памогите пажалуста


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru