Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление определённого слова, [...] 
:(
    Опции темы
lotusPKT
Дата 10.3.2008, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 25.6.2007

Репутация: нет
Всего: нет



Вопрос лёгкий.. но всё же не могу сделать это ))).. как удалить определённое слово с AnsiString...
Именно слова ... ))! 
PM MAIL   Вверх
andrew_121
Дата 10.3.2008, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: нет
Всего: 33



Допустим, слово находится в "str"
Код

const char* word = "слово";
int pos = str.Pos( word );
if ( pos == 0 ) {
   // слово не найдено...
}
str = str.mid( 0, pos ); // копируешь символы с 0-ой по "pos"
str += str.mid( pos + strlen(word), str.len()-(pos+strlen(word)) ); // копируешь символы с позиции
// (pos + strlen(word)) и до конца строки...

То что имена ф-ций членов именно такие Не гарантирую, так-как не пишу на Бормане,
подставишь те которые функционально аналогичны...


Это сообщение отредактировал(а) andrew_121 - 10.3.2008, 17:22


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Dmi3ev
Дата 10.3.2008, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 16
Всего: 41



вставь на форму три компонента Edit и одну кнопку, вставь на нажатие след. код
Код

AnsiString str;//строка
AnsiString word;//слова
int i;//для определения номера позиции, с которого начинается вхождение слова в строку
str=Edit1->Text;
word=Edit2->Text;
i=str.Pos(word);
if (i)//если не равно нулю
 Edit3->Text=str.SubString(1,i-1)+str.SubString(i+word.Length(),255);//текст после удаления слова
else
 ShowMessage("текст не найден!");

я думаю все станет ясно


--------------------

PM MAIL   Вверх
ksili
Дата 11.3.2008, 06:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: 1
Всего: 17



andrew_121, Dmi3ev, да вы гоните. Вы удаляете последовательность символов, а надо слово! Т.е. вокруг этой последовательности символов должны быть пробелы или знаки препинания.

Должно быть примерно так:
Код

AnsiString str;//строка
AnsiString word;//слова
int i;

while(i=str.Pos(word))
    {
     if((i==1 || str[i-1]==' ' || str[i-1]=='.' || str[i-1]==',') &&
        (i + word.Length()==str.Length() || str[i+word.Length()]==' ' || str[i+word.Length()]=='.' || str[i+word.Length()]==','))
         {
           str.Delete(i,word.Length());
         }
    }


Это сообщение отредактировал(а) ksili - 11.3.2008, 06:05


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Dmi3ev
Дата 11.3.2008, 07:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 16
Всего: 41



это уже пускай думает автор, что ему нужно, я показал лишь принцип удаления из строки последовательности символов! а остальное, дело его... , а если ты захотел помочь и отшлифовать код, ksili , то ты не учел воскл знак, тире, дефис, вопр. знак и т.д.



--------------------

PM MAIL   Вверх
ksili
Дата 11.3.2008, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: 1
Всего: 17



Цитата(Dmi3ev @  11.3.2008,  11:32 Найти цитируемый пост)
ты не учел воскл знак, тире, дефис, вопр. знак и т.д.

Я их не учел для краткости записи. 

Цитата(Dmi3ev @  11.3.2008,  11:32 Найти цитируемый пост)
я показал лишь принцип удаления из строки последовательности символов!

А автор прямо уточнил:
Цитата(lotusPKT @  10.3.2008,  21:00 Найти цитируемый пост)
Именно слова ... ))!  




--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
vivat
Дата 11.3.2008, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 6.4.2006
Где: Томск

Репутация: 2
Всего: 2



Цитата(ksili @ 11.3.2008,  06:02)
Должно быть примерно так:
Код

AnsiString str;//строка
AnsiString word;//слова
int i;

while(i=str.Pos(word))
    {
     if((i==1 || str[i-1]==' ' || str[i-1]=='.' || str[i-1]==',') &&
        (i + word.Length()==str.Length() || str[i+word.Length()]==' ' || str[i+word.Length()]=='.' || str[i+word.Length()]==','))
         {
           str.Delete(i,word.Length());
         }
    }

2ksili рекомендую небольшую модификацию, чтобы снять возражения по поводу разделителей
Код

AnsiString str;//строка
AnsiString word;//слова
AnsiString delimiter=" .,;:\"'?!-";
int i;

while(i=str.Pos(word))
    {
     if((i==1 || delimiter.Pos(str.SubString(i-1,1))) &&
        (i + word.Length()==str.Length() || delimiter.Pos(str.SubString(i+word.Length(),1))))
         {
           str.Delete(i,word.Length());
         }
    }

PM   Вверх
ksili
Дата 11.3.2008, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: 1
Всего: 17



vivat, так тоже пойдёт. Но будет медленнее работать, чем перечисление через || как в моём примере. Хотя в подавляющем большинстве случаев наверно и не будет заметно.
Там кстати надо -1 добавить:
Код

    
   ....
   (i + word.Length() - 1==str.Length() || ...



--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
andrew_121
Дата 11.3.2008, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: нет
Всего: 33



ksili, Задачу точнее ставить надо...


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
ksili
Дата 11.3.2008, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: 1
Всего: 17



andrew_121, согласен. Просто я предположил, что раз уж человек не может решить задачу, значит она немного сложнее, чем просто вырезать несколько символов из строки. Да lotusPKT и сам написал не раз - "слова" вырезать надо.


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
andrew_121
Дата 11.3.2008, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: нет
Всего: 33



ksili: Да, возможно...
lotusPKT: Для этого есть RegExp, чего велосипед изобретать:
Удачи...

Это сообщение отредактировал(а) andrew_121 - 11.3.2008, 13:17

Присоединённый файл ( Кол-во скачиваний: 16 )
Присоединённый файл  regexp_src.zip 32,17 Kb


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
lotusPKT
Дата 11.3.2008, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 25.6.2007

Репутация: нет
Всего: нет



Нефига ничего неполучается )))!
PM MAIL   Вверх
andrew_121
Дата 11.3.2008, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: нет
Всего: 33



Цитата(lotusPKT @ 11.3.2008,  16:46)
Нефига ничего неполучается )))!

Что у тебя не получаеться ?


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
lotusPKT
Дата 11.3.2008, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 25.6.2007

Репутация: нет
Всего: нет



)).. вот пример того что я хочу: )))
[ls]Слово[/ls] - как удолить [ls] и [/ls] - именно удолить а не стереть последовательность символов )))... Плиизз...  smile 
PM MAIL   Вверх
vivat
Дата 12.3.2008, 05:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 6.4.2006
Где: Томск

Репутация: 2
Всего: 2



Цитата(lotusPKT @ 11.3.2008,  18:01)
)).. вот пример того что я хочу: )))
[ls]Слово[/ls] - как удолить [ls] и [/ls] - именно удолить а не стереть последовательность символов )))... Плиизз...  smile

Не слишком заморачиваясь и используя предыдущий код
Код

  AnsiString str="[ls]Слово[/ls]";
  int i,j;
  while(i=str.Pos("["))
  {
    j=str.Pos("]");
    if(j>i) str.Delete(i,j-i+1);
  }

PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0595 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.