
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.3] |
![]() |
|
![]() |
|
|
Задача: заменить все вхождения строки str1 на подстроку str2, которые вводятся с клавиатуры.
Подсчитать кол-во произведенных замен. В двух вариантах, используя string, затем PChar. Спасибо. |
Сообщ.
#2
,
|
|
|
Проверь:
![]() ![]() var s,s1,s2:string; i,Ss1,kol:integer; begin write('Введите всю строку: '); readln(s); write('Введите строку для замены: '); readln(s1); write('Введите строку на которую будем заменять: '); readln(s2); i:=pos(s1,s); Ss1:=length(s1); while i<>0 do begin delete(s,i,Ss1); insert(s2,s,i); inc(kol); i:=pos(s1,s); end; Writeln(s); Writeln('Замен: ',kol); readln; end. А вообще решение такое: - С помощью функции pos находим первое вхождение подстроки s1 в основной строке s. - С помощью процедуры delete удаляем из строки s подстроку s1. - С помощью процедуры insert вставляем в строку s подстроку s2. Добавлено в : Из русского help'a к tp7 ![]() ![]() Pos (функция) ======================== Ищет подстроку в строке. Объявление: Function Pos(Substr : String; S : String) : Byte; Режим: Windows, Real, Protected Замечания: Параметры Substr и S - строковые выражения. Pos ищет первое вхождение строки Substr в строку S и возвращает целочисленное значение, которое является индексом первого символа Substr внутри S. Если строка Substr не найдена, то Pos возвращает нуль. Insert (процедура) ============================= Вставляет подстроку в строку. Объявление: Procedure Insert(Source : String; Var S : String; Index : Integer); Режим: Windows, Real, Protected Замечания: Параметр Source - выражение со строковым типом. Параметр S - переменная со строковым типом любой длины. Index - выражение целочисленного типа. Процедура Insert вставляет строку Source в строку S в позиции с номером Index. Если возникающая в результате строка длиннее 255-и символов, то она усекается после 255-го символа. Delete (процедура) ========================= Удаляет подстроку из строки. Объявление: Procedure Delete(Var S : String; Index : Integer; Count : Integer); Режим: Windows, Real, Protected Замечания: Параметр S - переменная со строковым типом. Index и Count - целочисленные выражения. Delete удаляет Count символов из строки S, начиная с позиции Index. Если значение Index больше, чем длина S, то никакие символы не удаляются. Если Count определяет большее количество символов, чем остается в строке с позиции Index до конца строки, то удаляется остаток строки. |
Сообщ.
#3
,
|
|
|
чего-то она не заработала..
|
Сообщ.
#4
,
|
|
|
Цитата Анатолий, 26.02.04, 15:54 чего-то она не заработала.. В смысле? Где ошибка? Или не верно выводит результат? Если я правильно понял что надо делать, то на примере: Строка: ааа ббб ввв ааа ггг заменить: ааа на: ддд на выходе: ддд ббб ввв ддд ггг; 2 замены Так? У меня всё работает. Либо ошибка ваша, либо я не правильно понял условие, либо работает правильно но не всегда? |
Сообщ.
#5
,
|
|
|
Дико извеняюсь, я напутал кое-что...Спасибо за помощь, с PChar'ом не подскажите?
|
Сообщ.
#7
,
|
|
|
Да, еще есть один глюк, на него здесь же нарвались, если найду, положу ссылку. Если менять ЛЕС на ЛЕСОПОВАЛ, программа зациклится.
Добавлено в : Нашел: Эффективный Replace ALL |