Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Выковыривание букв из текста...


Автор: ZENDAN 12.9.2005, 17:55
Ребят, здесь такая проблема… Беру первую букву из текста с помощью COPY, проверяю её по условиям, вставляю в другой текс…. Все работает!!! А вот вторую букву взять уже не могу!!! А по моей задумке из текста поочередно нужно взять все буквы и проверить их на соответствие некоторым условиям, а после напечатать обратно…. Вот, как их из текста поочередно выковырять? Подскажите пожалуйста…. Пробовал GOTO…. Прога просто виснет и всё! Как ее лучше закольцевать?

С уважением ZENDAN.

Автор: z-END 12.9.2005, 18:16
Код

var 
 x:Integer;
MyText,NewMyText:String;
begin
NewMyText:=EmptyStr;
for x:=1 to length(MyText)
  do  NewMyText:=MyText[x]+NewMyText;
end;

так получишь текст в обратном порядке

Автор: Mayk 12.9.2005, 18:21
А почему legth(txt)-1? В пасе же символы в строке идут начиная с первого?

Автор: z-END 12.9.2005, 18:24
Mayk лопухнулсяsmile) привык уже с объектами работатьsmile

Автор: Vet 15.9.2005, 17:30
ZENDAN, а чем проблема пройти всю строку по символам?
Код

for i := 1 to Length(Str) do
 if Str[i] = 'чему-то' then
  ...

А если надо текст в обратном порядке получить, то используй ReverseString из StrUtils

Автор: Albinos_x 15.9.2005, 17:59
Vet

Код

for i := 1 to Length(Str) do    
 if Str[i] = 'чему-то' then    
  ...


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


z-END дал ответ на вопрос, можно только ещё привести несколько вариаций:

Код

k:=length(MyText);
for x:=1 to    k  do  
    NewMyText:=NewMyText+MyText[k-x];    
end;

или (но более оптимальный, по сравнению с предыдущим вариантом)
Код

k:=length(MyText);
for x:=k downto    1  do  
    NewMyText:=NewMyText+MyText[x];    
end;


но это уже дело вкуса...

Автор: ~FoX~ 16.9.2005, 09:24
Цитата(Albinos_x @ 15.9.2005, 18:59)
или (но более оптимальный, по сравнению с предыдущим вариантом)

Если не секрет, с чего этот вариант более оптимальный.....

Автор: Rennigth 16.9.2005, 09:42
даешь каламбур...
минус один минус... гыгыгы... жуткая экономия... smile

Автор: Albinos_x 16.9.2005, 22:30
Цитата
с чего этот вариант более оптимальный

Код

MyText[k-x]


в первом на одну операцию больше... smile

ЗЫ: smile ну люблю я всё оптимизировать smile

Автор: Mayk 17.9.2005, 09:07
Уж если мы заговорили об оптимизации, то по http://www.rsdn.ru/article/devtools/perftest2.xml дельфи не очень быстро занимается конкатенацией(ссылку дал Void http://forum.vingrad.ru/index.php?showtopic=63600#)
Лучше сразу задать длину строки.
То есть примерно так
Код

     k:=length(oldText);
     setLength(newText,k);
     for i := 1 to k do
         newText[k-i+1] := oldText[i];

Вроде должно быть быстрее.

Автор: Albinos_x 17.9.2005, 10:37
...угу...

Автор: Vet 17.9.2005, 14:05
To Albinos_x
Цитата
по мойму текст этим не перевернёшь, а во вторых каждое условие дейтвует как крутой поворот для автомобиля и время выполнения кода увеличивается

По-моему, про тему топика уже забыли:
Цитата
А по моей задумке из текста поочередно нужно взять все буквы и проверить их на соответствие некоторым условиям, а после напечатать обратно

Вот откуда взялось
Код

for i := 1 to Length(Str) do
 if Str[i] = 'чему-то' then
  ...

Также я автору посоветовал использовать ReverseString. Зачем изобретать велосипед?

Автор: Albinos_x 17.9.2005, 14:10
Цитата
Вот откуда взялось


упс... просмотрел...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)