Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2014, 18:44   #1
Taner
Пользователь
 
Регистрация: 05.04.2014
Сообщений: 54
По умолчанию Замена букв(delphi)

У нас есть строки "что меняем"(edit1) и "на что меняем"(edit2) и словарик со словом.
Допустим в словаре слово bob а в заменах стоит b на i и b на w, т.е. мне надо чтобы результат был iow или woi, не выходит. Слова произвольной длины.
Мой пример меняет все на первом круге а на следующем при проверке " на наличие букв b" не находит их.
Код:
word:= memo1.Text;
ed1:= Edit1.Text;
ed2:= Edit2.Text;
for i:= 1 to length(word) do
   begin
     for i1:= 1 to length(ed1) do
       begin
         if (word[i] = ed1[i1]) then word[i]:= ed2[i1];
       end;
   end;

Последний раз редактировалось Taner; 25.04.2014 в 18:47.
Taner вне форума Ответить с цитированием
Старый 25.04.2014, 19:18   #2
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Косяк в том, что Вы заменяете ВСЕ букофки..
Код:
s := StringReplace(s, a, b, []);
Poma][a вне форума Ответить с цитированием
Старый 25.04.2014, 19:33   #3
Taner
Пользователь
 
Регистрация: 05.04.2014
Сообщений: 54
По умолчанию

Цитата:
Сообщение от Poma][a Посмотреть сообщение
Косяк в том, что Вы заменяете ВСЕ букофки..
Код:
s := StringReplace(s, a, b, []);
спасибо, попробую
сделал еще так
Код:
for i:= 1 to 10 do {количество слов в словаре}
   begin
     slovo:= word[i];
      for i1 := 1 to length(slovo) do {от 1 до длины 1го слова из словаря}
        begin
          slovo:= word[i];
            for j:= 1 to length(ed1) do {от 1 до длины поля edit1}
              begin
                slovo:= word[i];
                if slovo[i1] = ed1[j] then
                 begin
                   slovo[i1]:= ed2[j];
                   Writeln(f1, slovo);
                 end;
              end;
        end;
   end;
word уже массив
Taner вне форума Ответить с цитированием
Старый 25.04.2014, 22:34   #4
Taner
Пользователь
 
Регистрация: 05.04.2014
Сообщений: 54
По умолчанию

к сожалению мой второй вариант тоже не очень работает, а с предложенным вами я не очень разобрался, снова прошу помощи...

полученные переборы слова bob при замене bb на iw(iow)
iob
wob
boi
bow

Последний раз редактировалось Taner; 25.04.2014 в 22:36.
Taner вне форума Ответить с цитированием
Старый 25.04.2014, 23:00   #5
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Так-с.. Еще раз..
Код:
for i := 1 to n do begin
    Read(a, b);
    Change(s, a, b)
end;
где n - кол-во изменений в строке
Код:
procedure Change(var s : string; a, b : Char);
var
     i : Integer;
begin
     for i := 1 to n do 
            if s[i] = a then s[i] := b;
end;
или можно так :
Код:
s[Pos(a, s)] := b
Ничего не проверяю..

Объяснить еще надо?

Теперь..
Цитата:
полученные переборы слова bob при замене bb на iw(iow)
Тоесть Вы хотите получить
bob 2 замены b -> i b -> w
iow
Теперь генерим перестановки..? Или что?
Просто мне, в свою очередь, ничего не понятно..
Poma][a вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена букв! kykysya Общие вопросы Delphi 17 18.10.2010 21:17
C++ Замена прописных букв на строчные Eddie Помощь студентам 0 04.06.2009 16:52
Замена букв rasti6ka Паскаль, Turbo Pascal, PascalABC.NET 1 17.05.2009 15:24
замена знаков и букв memka PHP 8 19.04.2009 18:51