|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
12.10.2017, 22:14 | #1 |
Пользователь
Регистрация: 23.09.2017
Сообщений: 17
|
удалить второе вхождение подстроки в строку без использования стандартных функций Паскаля.
Добрый вечер!
Задание лабораторной написать программу, удаляющую второе вхождение подстроки в исходную строку, обе задаются с экрана, не используя стандартные функции для работы со строками (за исключением функции определения длины строки). Читал про специальные алгоритмы поиска подстроки в строке (Бойера-Мура), но пример программы не нашел. Может кто-нибудь решал подобную задачу? Поделитесь знанием, пожалуйста. |
13.10.2017, 09:01 | #3 |
Пользователь
Регистрация: 23.09.2017
Сообщений: 17
|
Нельзя использовать стандартные функции Паскаля, кроме Length! Используя Posex, я написал, все работает.
|
13.10.2017, 09:06 | #4 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Предложили же не PosEx использовать, а код из нее. А там только Length
add ну и PosEx ни капли не стандартная функция паскаля ))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 13.10.2017 в 09:13. |
13.10.2017, 09:30 | #5 | |
Цифровой кот
Старожил
Регистрация: 29.08.2014
Сообщений: 7,629
|
Цитата:
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
|
|
14.10.2017, 19:42 | #6 |
Пользователь
Регистрация: 23.09.2017
Сообщений: 17
|
Спасибо. Хотя там есть функция Pos (в 572 строке), а она уж точно стандартная.
|
14.10.2017, 21:33 | #7 |
Пользователь
Регистрация: 23.09.2017
Сообщений: 17
|
Нашел функцию по алгоритму Бойера-Мура, но программа работает так, что удаляет все вхождения, а мне нужно каждое второе. Почему не срабатывает?
Program lab2; //ищет в строке подстроку и удаляет все вхождения uses crt; function BMSearch(StartPos: Integer; const S, P: String): Integer; type TBMTable = array[0..255] of Integer; var Pos, lp, i, kol: Integer; BMT: TBMTable; begin for i := 0 to 255 do BMT[i] := Length(P); for i := Length(P) downto 1 do if BMT[Byte(P[i])] = Length(P) then BMT[Byte(P[i])] := Length(P) - i; lp := Length(P); Pos := StartPos + lp -1; while Pos <= Length(S) do if P[lp] <> S[Pos] then Pos := Pos + BMT[Byte(S[Pos])] else if lp = 1 then begin Result := Pos; Exit; end else for i := lp - 1 downto 1 do if P[i] <> S[Pos - lp + i] then begin Inc(Pos); Break; end else if i = 1 then begin Result := Pos - lp + 1; Exit; end; Result := 0; end; Procedure Vvod(var s1,s2:string); begin Writeln('Введите исходную строку: '); readln(s1); writeln('Введите подстроку: '); readln(s2); end; Procedure Vivod(s1,s2:string); begin writeln('Результат: ',s1); end; function Del(s1, s2: String):string; var i, n: integer; begin i := 0; n := 1; repeat n := BMSearch(1, s1, s2); if n > 0 then begin inc(i); if i mod 2 = 0 then delete(s1, n, length(s2)) else inc(n); end; until n = 0; Del := s1; end; var s1, s2: string; begin Vvod(s1,s2); s1 := Del(s1, s2); Vivod(s1,s2); readln; end. Последний раз редактировалось Max$$; 14.10.2017 в 21:37. |
15.10.2017, 10:50 | #9 |
Пользователь
Регистрация: 23.09.2017
Сообщений: 17
|
Спасибо! Только таких типов данных PascalABC не понимает (.
PWideChar и UnicodeString ..... какими типами можно заменить? Какими ни пытался. ругается , что не может преобразовать string в char. |
15.10.2017, 19:30 | #10 |
Забанен
Форумчанин Подтвердите свой е-майл
Регистрация: 01.11.2006
Сообщений: 420
|
a Delete это не стандартная функция?
Вот Вам пример: Код:
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Генератор псевдослучайных чисел без использования встроеных функций | lordik333 | C# (си шарп) | 1 | 03.12.2012 20:18 |
Дана строки S и S1. Каждое вхождение S1 в строку S в качестве подстроки заменить на обращенную подстроку S1 ( на Pascal ) | avizer | Помощь студентам | 11 | 20.03.2012 14:47 |
Вхождение подстроки в строку! | Edimus | Общие вопросы C/C++ | 4 | 04.04.2011 07:50 |
Задача по массивам и сортировка строк без стандартных функций. | AnnieFoxy | Помощь студентам | 3 | 19.01.2011 09:45 |
Как определить вхождение подстроки в строку поля? | Bendebej | SQL, базы данных | 3 | 23.03.2010 12:38 |