Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/26: Рейтинг темы: голосов - 26, средняя оценка - 4.65
3 / 3 / 0
Регистрация: 20.12.2009
Сообщений: 68

AnsiString , поиск и удаление частей слов

13.05.2010, 21:04. Показов 5208. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе время суток , уважаемые специалисты .
Столкнулся с проблемой .
Необходимо ввести в Edit1 , Edit2 текст , сравнить оба слова и удалить совпадающие части из Edit2 .
например :

Edit1 - смелый
Edit2 - смелость

результат : Edit2 - ость


вот примерно как я это вижу ...
но увы этот код не работает .. =(
как же его починить ?
буду благодарен за вашу помощь.




C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
int StartIndex = 1, EndIndex = 1;
AnsiString InputStr = Edit1->Text;
AnsiString SubStr = Edit2->Text;
 
while(1)                // бесконечный цикл. Нужен для многократной замены
{
int i;
for(i=1; i<=InputStr.Length();i++)  // будем искать по всей строке
       {
        for(int j=1; j<=SubStr.Length();j++)
         if(InputStr[i]=SubStr[j])      // как только нашли совпадения
         {
           StartIndex = i;         // запоминаем индекс начала совпадений
           bool EndFound = false;  // отмечаем, что конец слова еще не найден
           for( j = StartIndex; j<=InputStr.Length();j++) // и ищем его
           {
            if(InputStr[i]!=SubStr[j])   // нашли
            {
             EndFound = true;      // отмечаем, что конец найден
             EndIndex = j;         // запоминаем индекс конца совпадений
            }
            if(EndFound)           // и если конец найден
            {                      // (а ведь его может и не быть)
             InputStr.Delete(StartIndex,(EndIndex-StartIndex+1));// вырезаем найденый кусок
             break; // выходим из цикла
            }
           }
         }
       }
if(i>InputStr.Length()) break; // если мы досмотрели всю строку до конка, то выходим
}
Edit2->Text = InputStr;
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.05.2010, 21:04
Ответы с готовыми решениями:

Поиск частей слов в строке
Добрый вечер! Товарищи, помогите, пожалуйста)) У меня есть, допустим, переменная Str, типа String В ней (как уже это понятно)...

Поиск слов по маске в строке, их удаление, сортировка оставшихся слов
Доброго времени суток. Помогите, пожалуйста, реализовать задачу. нужно из текстового файла считать текст, потом по введенной пользователем...

Поиск и удаление слов в тексте
Здравствуйте, тут такое дело, не могу понять в чем ошибка. В общем, я беру первый файл с текстом, выделяю первое слово, ищу его во всем...

6
332 / 247 / 32
Регистрация: 13.12.2009
Сообщений: 589
13.05.2010, 23:51
Цитата Сообщение от Tiesto Посмотреть сообщение
например :
Edit1 - смелый
Edit2 - смелость
части в начале слов, или в любом месте?
0
3 / 3 / 0
Регистрация: 20.12.2009
Сообщений: 68
14.05.2010, 00:21  [ТС]
Цитата Сообщение от Roma_F Посмотреть сообщение
части в начале слов, или в любом месте?
В любом месте .
0
 Аватар для Jafa
51 / 51 / 13
Регистрация: 05.06.2008
Сообщений: 139
14.05.2010, 00:39
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int StartIndex = 0, EndIndex = 0;
AnsiString InputStr = Edit1->Text;
AnsiString SubStr = Edit2->Text;
 
for(int i=1;i<InputStr.Length();i++){
        for(int a=1;a<SubStr.Length();a++){
                if(InputStr[i]==SubStr[a]){
                        StartIndex=i;
                        for(int e=1;((i+e)<=InputStr.Length())&&((a+e)<=SubStr.Length());e++){
                                if(InputStr[i+e]==SubStr[a+e]){
                                        EndIndex=i+e;
                                                              }
                                else {break;}
                                                                                           }
                                          }
                        if((StartIndex>0)&&(EndIndex>StartIndex)){
                                InputStr.Delete(StartIndex,EndIndex-StartIndex+1);
                                StartIndex=0;
                                EndIndex=0;
                                                                 }
                                          }
                                    }
Edit3->Text = InputStr;
1
3 / 3 / 0
Регистрация: 20.12.2009
Сообщений: 68
14.05.2010, 15:35  [ТС]
Цитата Сообщение от Jafa Посмотреть сообщение
for(int e=1;((i+e)<=InputStr.Length())&&((a+e)<= SubStr.Length());e++)
а можно комментарий к этой части ?

Добавлено через 57 минут
а почему в результате сравнения выходит 1 ??
0
 Аватар для Jafa
51 / 51 / 13
Регистрация: 05.06.2008
Сообщений: 139
14.05.2010, 17:36
немного переделал
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int StartIndex = 0, EndIndex = 0;
AnsiString InputStr = Edit1->Text;
AnsiString SubStr = Edit2->Text;
for(int i=1;i<=InputStr.Length();i++){
        for(int a=1;a<=SubStr.Length();a++){
                if(InputStr[i]==SubStr[a]){
                        StartIndex=i;
                        for(int e=1;((i+e)<=InputStr.Length())&&((a+e)<=SubStr.Length());e++){
                                if(InputStr[i+e]==SubStr[a+e]){
                                        EndIndex=i+e;
                                                              }
                                else {break;}
                                                                                             }
                        if((StartIndex>0)&&(EndIndex>StartIndex)){
                                InputStr.Delete(StartIndex,EndIndex-StartIndex+1);
                                StartIndex=0;
                                EndIndex=0;
                                break;
                                                                 }
                                          }
                                           }
                                    }
Edit3->Text = InputStr;
for(int e=1;((i+e)<=InputStr.Length())&&((a+e)<= SubStr.Length());e++)

если один из символов совпал, проверяем на совпадение следующие символы, тоесть
e=1;
InputStr[i+e]; - следующий символ
e++;
InputStr[i+e]; - еще следующий символ
SubStr[a+e]; - так же само со второй строкой

условие ((i+e)<=InputStr.Length())&&((a+e)<=SubS tr.Length()) ограничивает цикл чтоб не выйти за пределы строк InputStr и SubStr
1
3 / 3 / 0
Регистрация: 20.12.2009
Сообщений: 68
14.05.2010, 19:29  [ТС]
Спасибо , все прекрасно работает !)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.05.2010, 19:29
Помогаю со студенческими работами здесь

Поиск повторяющихся слов и их удаление
Задача: для заданного текста определить 1)сколько раз каждое слово встречается в тексте 2)удалить слова,встречающиеся более одного...

Поиск одинкаковых слов в memo и их удаление
Как сделать поиск слова, предложения введенного в едит и его последующего удаления. Удаление всех строк вместо с оригиналом чтобы таких...

ListBox поиск и удаление всех слов
Привет, нужно найти и удалить все строки в ListBox с текстом 'delphi'. В ListBox такие строки: аепрроьdelphijkm, fghjkjhb ...

Поиск одинаковых слов и удаление символов между ними
Дан текст, между словами один или несколько пробелов. В тексте имеется два одинаковых слова. Удалить все символы, лежащие между этими...

Поиск слов с определенным форматом и удаление этого слова вместе с абзацем
Приветствую! Прошу помочь с одним важным делом. Есть вордовский файл: в котором находиться тема с текстом (где тема имеет формат:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru