Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
0 / 0 / 0
Регистрация: 15.01.2020
Сообщений: 7

Удалить из строки S1 вторую подстроку S2. Если такой подстроки S2 не содержится в S1, то вывести S1 без изменений

15.01.2020, 19:48. Показов 4615. Ответов 2

Студворк — интернет-сервис помощи студентам
Удалить из строки S1 вторую подстроку S2. Если такой подстроки S2 не содержится в S1, то вывести S1 без изменений.
Короче, если нет повторений, должно выводить S1, а если два и более повторений, удаляло только второе повторение. К примеру S1=12q12w12, S2=12, должно выводиться 12qw12, если S1=12d12f12g12, S2=12, должно выводиться 12df12g12. Как-то так. У меня есть программа, но она слегка кривая, помогите исправить ее, или она вообще здесь не подходит?
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Program ABC;
var
S1, S2, S3: string;
i, inew, l,k: integer;
begin
k:=0;
writeln('S1');
readln(S1);
S3:=S1;
writeln('S2');
readln(S2);
l := Length(S1);
i := 0;
repeat
inew := Pos(S2, Copy(S1, i + 1, l));
if inew <> 0 then begin
i := i + inew;
k:=k+1;
end;
until inew = 0;
if (i <> 0) then
Delete(S1, i, length(S2));
if k>1 then writeln(s1) else writeln (s3);
end.
Добавлено через 9 минут
На этом сайте уже есть решение этой задачи, но оно не подходит, так что не скидывайте его, пожалуйста. Мне просто надо что-то изменить в моей программе, чтобы все работало как надо)

Добавлено через 12 минут
Так же есть еще одна программа, которая почти похожа на правду, только удаляет первое повторение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
program abc;
Var
s, s0: string;
i: integer;
begin
writeln('Введите строку');
readln(s);
writeln('Введите подстроку');
readln(s0);
i := Pos(s0, s);
if i > 0  then Delete(s, i, length(s0));
writeln('Результат:');
writeln(s)
end.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.01.2020, 19:48
Ответы с готовыми решениями:

Даны строки S и S0. Удалить из строки S первую подстроку, совпадающую с S0. Если совпадений подстрок нет, то вывести S без изменений.
Даны строки S и S0. Удалить из строки S первую подстроку, совпадающую с S0. Если совпадений подстрок нет, то вывести S без изменений.

Даны две строки: S1 и S2. Удалить из строки S1 последнюю подстроку, совпадающую с S2. Если таких подстрок нет, то вывести S1 без изменений
Вот условие: Даны две строки: S1 и S2. Удалить из строки S1 последнюю подстроку, совпадающую с S2. Если таких подстрок нет, то вывести S1...

Удалить из строки S1 подстроку S2, если S2 не содержится в S1, вывести S1 без изменений
Даны строки S1 и S2. Удалить из строки S1 подстроку S2, если S2 не содержится в S1, вывести S1 без изменений.

2
2374 / 776 / 561
Регистрация: 15.01.2019
Сообщений: 2,394
16.01.2020, 02:20
Лучший ответ Сообщение было отмечено Jodi47 как решение

Решение

Вы молодец! Очень толково изъяснили суть своей проблемы.
Держите программку. Программка не шедевр, может кто-то сделает код лучше.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Program ABC;
var
  s1, s2, s3: string;
  i, ipos, firstpos: integer;
begin
  writeln('Введите строку:');
  readln(s1);
  s3:= s1;
  writeln('Введите подстроку:');
  readln(s2);
  i:= 0;
  repeat
    ipos:= Pos(s2, s3);                {нахождение индекса вхождения подстроки в строку }
    Delete(s3, ipos, length(s2));   {удаление найденной подстроки из строки }
    inc(i);                                   { подсчет найденных вхождений подстроки}
    if i = 1 then                           { если программа нашла подстроку первый раз то запомнить индекс}
      firstpos:= ipos;
    if i = 2 then                           { если программа нашла подстроку второй раз, то вставить подстроку, 
                                                   обратно по индексу и выйдет из цикла}
      begin
        insert(s2,s3,firstpos);
        break;
      end;
  until ipos = 0;       {если подстрока не найдена в строке, то цикл прекращается}
  if i <= 1 then        { если количество найденных вхождений подстроки либо 0, либо 1, то выводиться 
                                                  начальная строка}
    writeln(s1)
  else                     { если количество найденных вхождений подстроки больше 1, то выводиться отредактированная строка}
    writeln(s3);
  readln;
end.
1
0 / 0 / 0
Регистрация: 15.01.2020
Сообщений: 7
16.01.2020, 02:28  [ТС]
Просто огромное спасибо, вы помогли мне сдать последнюю лабараторку для зачета)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.01.2020, 02:28
Помогаю со студенческими работами здесь

Удалить из строки S1 все подстроки, совпадающие с S2. Если таких подстрок нет, то вывести S1 без изменений.
Даны две строки: S1 и S2. Удалить из строки S1 все подстроки, совпадающие с S2. Если таких подстрок нет, то вывести S1 без изменений.

Процедура: удалить из строки х1 все подстроки, совпадающие с х2, если таких подстрок нет, то вывести х1 без изменения
с помощью процедуры решить следующую задачу. даны 2 строки х1 и х2. удалить из строки х1 все подстроки, совпадающие с х2, если таких...

Даны строки S и S нулевое.Проверить, содержится ли строка S нулевое в строке S. Если содержится, то вывести TRUE, если не содержится, то FALSE.
Помогите с такой вот программой пожалуйста... Даны строки S и S нулевое.Проверить, содержится ли строка S нулевое в строке S. Если...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru