iru |
Отправлено: 01.05.2004, 20:56 |
|
Не зарегистрирован
|
ни могу сделать следующее:
надо найти слова ограниченные символами "<>" в строке.
таких слов может быть N-ое колличество.
заменить их на другие слова и поставить в эту же строку на их место.
Например:
" товарищь <пупкин>, является на самом деле не <пупкин>.
он был <пупкин> , но очень давно."
Надо заменить "Пупкин" на "Иванов" без ковычек и знаков "<>"
т.е. предложение после обработки должно выглядить так:
"товаришь Иванов, является на самом деле не Иванов, он был Иванов,
но очень давно."
помогите, плз.
|
|
gauldot |
Отправлено: 01.05.2004, 21:49 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 22
|
Ну если в угловатых скобках надо заменять одно и тоже слово, то можно воспользоваться функцией:
CODE |
#include <StrUtils.hpp>
AnsiString AnsiReplaceText (AnsiString Gde, AnsiString Chto, AnsiString NaChto);
| |
|
exp |
Отправлено: 01.05.2004, 23:20 |
|
Мастер участка
Группа: Участник
Сообщений: 304
|
Вот код.
CODE |
int StartIndex = 1, EndIndex = 1;
AnsiString InputStr = Edit1->Text; // Здесь будем менять
AnsiString SubStr = Edit3->Text; // на это
while(!false==true) // бесконечный цикл. Нужен для многократной замены
{
int i;
for(i=1; i<=InputStr.Length();i++) // будем искать по всей строке "<"
{
if(InputStr[i]=='<') // как только нашли — будем искать ">"
{
StartIndex = i; // запоминаем индекс символа "<"
bool EndFound = false; // отмечаем, что конец слова еще не найден
for(int j = StartIndex; j<=InputStr.Length();j++) // и ищем его
{
if(InputStr[j]=='>') // нашли
{
EndFound = true; // отмечаем, что конец найден
EndIndex = j; // запоминаем индекс символа ">"
}
if(EndFound) // и если конец найден
{ // (а ведь его может и не быть)
InputStr.Delete(StartIndex,(EndIndex-StartIndex+1));// вырезаем найденый кусок
InputStr.Insert(SubStr, StartIndex); // и вставляем строк-заменитель
break; // выходим из цикла
}
}
}
}
if(i>InputStr.Length()) break; // если мы досмотрели всю строку до конка, то выходим
}
Edit2->Text = InputStr;
|
Если теперь в Edit1->Text ввести :
товарищь <пупкин>, является на самом деле не <пупкин>.он был <пупкин> , но очень давно.
А в Edit3->Text:
Иванов
То в Edit2->Text получится:
товарищь Иванов, является на самом деле не Иванов.он был Иванов , но очень давно.
Вроде все.
|
|
Георгий |
Отправлено: 01.05.2004, 23:58 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
QUOTE | while(!false==true) |
круто!!
а
или
писать не модно?
причём последнее официально вечный цикл |
|
exp |
Отправлено: 02.05.2004, 23:43 |
|
Мастер участка
Группа: Участник
Сообщений: 304
|
да прикол это просто.
а можно и так извратиться
или
CODE |
bool x = true; //впрочем, пофиг, что вы им присвоите
bool y = false;//--|
bool z = false //--|
while(!(!x||(!y||z))||(!(!x||y)||(!x||z)))
{
...
}
|
Выражение в скобках тавталогия (тождественно true)[U]
Отредактировано exp — 03/05/2004, 00:47
|
|
Doga |
Отправлено: 03.05.2004, 19:27 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
Мдя...
А про
extern PACKAGE AnsiString __fastcall StringReplace(const AnsiString S, const AnsiString OldPattern, const AnsiString NewPattern, TReplaceFlags Flags);
все забыли чтоль? Она сама без циклов может всё чо надо заменить...
|
|
iru |
Отправлено: 04.05.2004, 17:49 |
|
Не зарегистрирован
|
спасибо, всем ответившим, особенно EXP.
ибо гибко, кое-что для себя поправлю и то что надо!
так как слова в <> ,будут использоваться в качестве параметров
для других функций.
ещё раз всем ограменное спасибо.
кстати, узнал о новых функциях |
|
Gedeon |
Отправлено: 05.05.2004, 09:25 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
QUOTE |
while(!false==true) |
Да — это СУПЕР!
|
|
olegenty |
Отправлено: 05.05.2004, 09:41 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
меня
смущает с точки зрения лишних нажатий на клавиши. самая короткая запись, не менее понятная:
в любом учебнике же написано, что false это 0, а true — это не ноль.
ну, в крайнем случае
но оператор сравнения там зачем, всё равно не доходит...
|
|
Георгий |
Отправлено: 05.05.2004, 11:19 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
QUOTE | смущает с точки зрения лишних нажатий на клавиши | всего 7 символов, в то время, как целых 8!
|
|