Форум программистов, компьютерный форум, киберфорум
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. Показов 4576. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru