На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Название темы должно быть информативным !
Прежде чем задать вопрос, воспользуйтесь Поиском. и проверьте в FAQ (ЧАВО) Паскаля
Чтобы получить вразумительный ответ, подробно опишите проблему: что надо сделать, что не получается и номер ошибки (если есть), которую выводит компилятор.
Для вставки кода ваших программ используйте, пожалуйста, кнопку СODE=pas или выпадающий список СODE для других языков (подсветка синтаксиса).
[!] Как правильно задавать вопросы | Руководство по языку B.Pascal 7 & Objects/LR | Borland Pascal. Руководство пользователя
Модераторы: volvo877
  
> Помогите с текстом проги
    Задача: заменить все вхождения строки str1 на подстроку str2, которые вводятся с клавиатуры.
    Подсчитать кол-во произведенных замен.

    В двух вариантах, используя string, затем PChar.


    Спасибо.
      Проверь:
      ExpandedWrap disabled
        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

      ExpandedWrap disabled
        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 до конца строки, то удаляется
        остаток строки.
        чего-то она не заработала..
          Цитата
          Анатолий, 26.02.04, 15:54
          чего-то она не заработала..

          В смысле? Где ошибка? Или не верно выводит результат?

          Если я правильно понял что надо делать, то на примере:

          Строка: ааа ббб ввв ааа ггг
          заменить: ааа
          на: ддд
          на выходе: ддд ббб ввв ддд ггг; 2 замены

          Так?
          У меня всё работает.
          Либо ошибка ваша, либо я не правильно понял условие, либо работает правильно но не всегда?
            Дико извеняюсь, я напутал кое-что...Спасибо за помощь, с PChar'ом не подскажите?
              Для начала, вам стоит прочитать про работу с pchar в Pascal FAQ:
              pChar
                Да, еще есть один глюк, на него здесь же нарвались, если найду, положу ссылку. Если менять ЛЕС на ЛЕСОПОВАЛ, программа зациклится.

                Добавлено в :
                Нашел: Эффективный Replace ALL
                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,9194 ]   [ 14 queries used ]   [ Generated: 18.07.25, 00:22 GMT ]