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

Удалить из строки первое и последнее вхождение заданной подстроки.

20.12.2015, 09:48. Показов 3833. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
1.Написать программу, удаляющую из строки первое и последнее вхождение заданной подстроки.
2.Считывание строк должно осуществляться с экрана и быть реализовано в виде отдельной подпрограммы с передачей параметра-строки по адресу.
3.Поиск и удаление вхождений подстроки должны выполняться в отдельной функции.
4.Вывод результата необходимо выполнять с помощью отдельной подпрограммы.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.12.2015, 09:48
Ответы с готовыми решениями:

Написать программу, удаляющую из строки первое и последнее вхождение заданной подстроки
2.*Написать программу, удаляющую из строки первое и последнее вхождение заданной подстроки. 3.*Все...

Удалить из строки первое вхождение заданной подстроки
Найти ошибки в коде с++ удалить из строки первое вхождение буквосочетание 'while' #include...

Удалить из строки первое и последнее вхождение буквы
Нужно чтобы пользователь вводил текст, в котором буква H встречается минимум два раза. Нужно...

Найти первое и последнее вхождение заданной буквы в слове
Дана строка. Если в этой строке буква f встречается только один раз, выведите её индекс. Индексы...

12
Почетный модератор
64288 / 47587 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
20.12.2015, 10:51 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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
32
uses crt;
procedure vvod(var s:string;s1:string);
begin
writeln(s1);
readln(s);
end;
function del(s,ps:string):string;
var i,p:integer;
begin
if pos(ps,s)>0 then delete(s,pos(ps,s),length(ps));
i:=length(s)-length(ps)+1;
p:=0;
while (i>0)and(p=0) do
if copy(s,i,length(ps))=ps then p:=i
else dec(i);
if p>0 then delete(s,p,length(ps));
del:=s;
end;
procedure vyvod(s,s1,ps:string);
begin
writeln(s1,ps);
writeln(s);
end;
var s,ps:string;
begin
clrscr;
vvod(s,'Введите строку');
vvod(ps,'Введите подстроку');
s:=del(s,ps);
vyvod(s,'Удаление первой и последней подстроки ',ps);
readln
end.
1
0 / 0 / 0
Регистрация: 17.12.2015
Сообщений: 17
28.12.2015, 14:15  [ТС] 3
спасибо)))от души))) если не сложно, можно еще составить алгоритм))
0
CAPITAL OF ROCK!
1281 / 708 / 982
Регистрация: 03.03.2010
Сообщений: 2,286
28.12.2015, 14:23 4
Вован_1, алгоритм уже "составлен". быть может, речь о блок-схеме?
0
0 / 0 / 0
Регистрация: 17.12.2015
Сообщений: 17
28.12.2015, 16:05  [ТС] 5
ну да, я это и имел ввиду)))
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32587 / 21057 / 8133
Регистрация: 22.10.2011
Сообщений: 36,330
Записей в блоге: 8
28.12.2015, 21:06 6
Если чуть-чуть воспользоваться средствами, которые предоставляет FPC, то функцию Del можно сократить до:
Pascal
1
2
3
4
5
6
7
function del(s,ps:string):string;
var i,p:integer;
begin
  if pos(ps,s)>0 then delete(s,pos(ps,s),length(ps));
  if rpos(ps, s) > 0 then delete(s, rpos(ps, s), length(ps)); // подключить в uses модуль StrUtils
  del:=s;
end;
0
CAPITAL OF ROCK!
1281 / 708 / 982
Регистрация: 03.03.2010
Сообщений: 2,286
28.12.2015, 21:38 7
volvo, неужели не жалко разворачивать два цикла вместо одного?
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function del(s,ps: String): String;
var
    i: Word;
begin
    i := Pos(ps, s);
    if (i > 0)
    then
    begin
        Delete(s, i, Length(ps));
        i := RPos(ps, s);
        if (i > 0)
        then
            Delete(s, i, Length(ps));
    end;
    del := s;
end;
0
0 / 0 / 0
Регистрация: 17.12.2015
Сообщений: 17
27.01.2016, 16:14  [ТС] 8
Короч ребят такая фигня)) код правильный прога работает)) но препод докапался)) при вводе ABABA и удалении ABA
выводит BA )) а он говорит что должно ничего не остаться(тип первое и последнее вхождение это ABA) как исправить код???
0
CAPITAL OF ROCK!
1281 / 708 / 982
Регистрация: 03.03.2010
Сообщений: 2,286
28.01.2016, 11:58 9
Вован_1, поздравляю. ваш препод - наркоман. или его забавляет стебаться над студентотой.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32587 / 21057 / 8133
Регистрация: 22.10.2011
Сообщений: 36,330
Записей в блоге: 8
28.01.2016, 12:24 10
Лучший ответ Сообщение было отмечено ZX Spectrum-128 как решение

Решение

Вован_1,
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function del(s, ps : string) : string;
var first, last, len : integer;
begin
  len := length(ps);
  first := pos(ps, s); last := rpos(ps, s);
  // (существуют как минимум 2 разных вхождения подстрок) И
  // (они пересекаются, т.е., второе начинается раньше, чем заканчивается первое)?
  if (first * last * (first - last) <> 0) and (first + len > last) then s := ''
  else
  begin
    // пересечения нет, или вхождении подстрок меньше 2-х
    if last > 0 then delete(s, last, len); // удаляем сначала последнее
    if (first > 0) and (first <> last) then delete(s, first, len); // а потом, если их было 2 разных - то и первое
  end;
  del := s; // всё, уходим
end;
Но курит ваш преподаватель какие-то неправильные шишки...
1
CAPITAL OF ROCK!
1281 / 708 / 982
Регистрация: 03.03.2010
Сообщений: 2,286
28.01.2016, 14:44 11
или как вариант. но строка не должна быть длиннее 255 символов.
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
32
33
34
35
36
37
38
39
40
41
42
43
44
uses
    strutils;
 
procedure InputString(var s: String; const param: String);
begin
    Write(param); ReadLn(s);
end;
 
function DelSubstring(const s, ps: String): String;
var
    mn: Set Of Byte = [];
    i, j: Byte;
    Result: String = '';
begin
    i := Pos(ps, s);
    if (i > 0)
    then
    begin
        for j := i to i + Length(ps) - 1 do
            Include(mn, j);
        i := RPos(ps, s);
        for j := i to i + Length(ps) - 1 do
            Include(mn, j);
        for i := 1 to Length(s) do
            if Not (i in mn)
            then
                Result := Result + s[i];
    end;
    DelSubstring := Result;
end;
 
procedure OutputString(const s1, s2: String);
begin
    WriteLn('Original: ', s1);
    WriteLn('Modified: ', s2);
end;
 
var
    s, ss: String;
begin
    InputString(s, 'Input string: ');
    InputString(ss, 'Input substring: ');
    OutputString(s, DelSubstring(s, ss));
end.
0
0 / 0 / 0
Регистрация: 17.12.2015
Сообщений: 17
29.01.2016, 20:03  [ТС] 12
вот я про тоже)) препод ваще в неадеквате)))
проверил, на Rpos ругается прога
0
CAPITAL OF ROCK!
1281 / 708 / 982
Регистрация: 03.03.2010
Сообщений: 2,286
29.01.2016, 20:27 13
Вован_1, uses strutils;
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.01.2016, 20:27
Помогаю со студенческими работами здесь

Найти первое вхождение в строку заданной подстроки
Без использования функций стандартной библиотеки выполнить задание: найти первое вхождение в строку...

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

В заданной строке текста, удалить первое и последнее слово
В заданной строке текста, удалить первое и последнее слово

В заданной строке текста удалить первое и последнее слово
В заданной строке текста удалить первое и последнее слово.

Удалить из строки каждое вхождение подстроки
Удалить из строки s каждое вхождение подстроки s1. На С++ Дублирование тем запрещено правилами...

Удалить из строки первое вхождение буквосочетание 'not'
Заданная строка S. Превратить S следующим образом: 1) Удалить из S первое вхождение буквосочетание...


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

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

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