Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.61/31: Рейтинг темы: голосов - 31, средняя оценка - 4.61
FedExpress
1 / 1 / 0
Регистрация: 30.04.2012
Сообщений: 54
1

Поиск слова в Memo

14.05.2012, 15:44. Просмотров 5650. Ответов 18
Метки нет (Все метки)

Есть 2 поля Memo с текстом, есть поле Edit, куда вводится слово. Как найти количество вхождений слова с Edit в Memo?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2012, 15:44
Ответы с готовыми решениями:

Поиск неявно заданного слова в Memo
Здравствуйте, подскажите, пожалуйста, как реализовать такое: В Memo есть...

Поиск слова в файле и вывод строки в поле Memo
Помогите написать код для кнопки после нажатия она должна считать даные с...

Memo и слова.
Помогите написать программу надо поменять местами первое и второе слово в...

Вывести в Memo неповторяющиеся слова
Дан текст, содержащий от 1 до 30 слов, в каждом из которых от 1 до 5 строчных...

Поиск в Memo
Есть массив указателей на объекты одного класса У класса 5 полей При нажатии...

18
Avazart
Эксперт С++
7725 / 5634 / 549
Регистрация: 10.12.2010
Сообщений: 25,412
Записей в блоге: 17
14.05.2012, 16:37 2
Как реализовать FindNext в FindDialog для компонента RichEdit?
Выделение предложений в RichEdit C++ Builder
0
FedExpress
1 / 1 / 0
Регистрация: 30.04.2012
Сообщений: 54
14.05.2012, 16:48  [ТС] 3
Это, по моему, не совсем то. Мне нужно прогнать слово по 2 текстам в Мемо, и сделать какой-нибудь счетчик, чтоб посчитать их количество.
Вот как-то так пробую, это правда неправильно, но может кто-нибудь подправит:
C++
1
2
3
4
5
6
7
8
9
10
AnsiString word;
int p, w = 0;
 
word = Edit1->Text;
for( int i =0; i<Memo3->Lines->Count; i++)
{
if (Memo3->Lines[i] = word)
{
w = w+1;
}
0
Avazart
Эксперт С++
7725 / 5634 / 549
Регистрация: 10.12.2010
Сообщений: 25,412
Записей в блоге: 17
14.05.2012, 17:21 4
Думаю то
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int start=0,stop=0;//Глобально обьявляем
String Text="Что-то";
//-----------------------------------------------------------------
TSearchTypes Stype;
Stype = Stype << stMatchCase;
 
// В цикле
{
stop = RichEdit1->FindText(Text,start,RichEdit1->Text.Length(),Stype);
start = stop + 1;
// Что-то делаем
}
//------------------------------------------------------------------
0
FedExpress
1 / 1 / 0
Регистрация: 30.04.2012
Сообщений: 54
14.05.2012, 17:49  [ТС] 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int start=0,stop=0;
 
void __fastcall TForm1::Button5Click(TObject *Sender)
{
   AnsiString Text=Memo3->Text;
 
  TSearchTypes Stype;
Stype = Stype << stMatchCase;
 
 
{
stop = Edit1->FindText(Text,start,Edit1->Text.Length(),Stype);
start = stop + 1;
}
 }
[C++ Error] Unit1.cpp(205): E2451 Undefined symbol 'TSearchTypes'

А вообще тот пример, который я раньше приводил переделать чуток нельзя?
0
nick42
Практикантроп
4289 / 2305 / 401
Регистрация: 23.09.2011
Сообщений: 4,928
14.05.2012, 17:50 6
FedExpress,если у Вас в эдите и в строках мэмо действительно слова, то почти все правильно, только логическое условие пишется иначе: не

if (Memo3->Lines[i] = word)
, а
if (Memo3->Lines[i] == word)
0
Avazart
Эксперт С++
7725 / 5634 / 549
Регистрация: 10.12.2010
Сообщений: 25,412
Записей в блоге: 17
14.05.2012, 17:58 7
Используйте RichEdit вместо Memo

Добавлено через 2 минуты
И
C++
1
stop = RichEdit1->FindText(Text,start,RichEdit1->Text.Length(),Stype);//  не  Edit
0
FedExpress
1 / 1 / 0
Регистрация: 30.04.2012
Сообщений: 54
14.05.2012, 18:16  [ТС] 8
Цитата Сообщение от nick42 Посмотреть сообщение
FedExpress,если у Вас в эдите и в строках мэмо действительно слова, то почти все правильно, только логическое условие пишется иначе: не

, а
Попробовал, выдает
[C++ Error] Unit1.cpp(208): E2094 'operator==' not implemented in type 'TStrings' for arguments of type 'AnsiString'
0
nick42
Практикантроп
4289 / 2305 / 401
Регистрация: 23.09.2011
Сообщений: 4,928
14.05.2012, 18:18 9
правильно! я не заметил: не ->Lines[i], а ->Lines->Strings[i]
1
FedExpress
1 / 1 / 0
Регистрация: 30.04.2012
Сообщений: 54
14.05.2012, 18:33  [ТС] 10
Цитата Сообщение от nick42 Посмотреть сообщение
правильно! я не заметил: не ->Lines[i], а ->Lines->Strings[i]
Сделал так, но снова проблема. в Label7 ничего не выводит, хотя я ввожу слово для поиска такое, что оно точно есть в тексте. Прикрепляю код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
AnsiString word;
int p, w = 0;
 
word = Edit1->Text;
for( int i =0; i<Memo3->Lines->Count; i++)
{
if (Memo3->Lines->Strings[i] == word)
{
w = w+1;
Label7->Caption=w;
}
 
 
}
0
Drygba
507 / 449 / 119
Регистрация: 17.02.2012
Сообщений: 1,032
Записей в блоге: 1
14.05.2012, 18:48 11
Label7->Caption = IntToStr(w);

Добавлено через 4 минуты
Цитата Сообщение от FedExpress Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
AnsiString word;
int p, w = 0;
 
word = Edit1->Text;
for( int i =0; i<Memo3->Lines->Count; i++)
{
if (Memo3->Lines->Strings[i] == word)
{
w = w+1;
Label7->Caption=w;
}
 
 
}
разве этот код работает, по моему он проверят является ли строка равной Edit, а не считает:
Цитата Сообщение от FedExpress Посмотреть сообщение
количество вхождений слова с Edit в Memo?
можно ли средством Memo сделать такой поиск?
0
FedExpress
1 / 1 / 0
Регистрация: 30.04.2012
Сообщений: 54
14.05.2012, 18:50  [ТС] 12
Цитата Сообщение от Drygba Посмотреть сообщение
Label7->Caption = IntToStr(w);

Добавлено через 4 минуты
разве этот код работает, по моему он проверят является ли строка равной Edit, а не считает:

можно ли средством Memo сделать такой поиск?
Не помогло

"разве этот код работает, по моему он проверят является ли строка равной Edit, а не считает"
мне тоже так кажется
0
Avazart
Эксперт С++
7725 / 5634 / 549
Регистрация: 10.12.2010
Сообщений: 25,412
Записей в блоге: 17
14.05.2012, 18:52 13
Memo нет.
С помощью методов строк можно.
Методы Pos() и SubStr().
0
The_Immortal
1560 / 496 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
14.05.2012, 18:53 14
FedExpress, а что не так?
0
FedExpress
1 / 1 / 0
Регистрация: 30.04.2012
Сообщений: 54
14.05.2012, 18:53  [ТС] 15
Цитата Сообщение от Avazart Посмотреть сообщение
Memo нет.
С помощью методов строк можно.
Методы Pos() и SubStr().
Можешь на примере этого кода примерно показать?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
AnsiString word;
int p, w = 0;
 
word = Edit1->Text;
for( int i =0; i<Memo3->Lines->Count; i++)
{
if (Memo3->Lines->Strings[i] == word)
{
w = w+1;
Label7->Caption=w;
}
 
 
}
0
Sergey-K
235 / 226 / 58
Регистрация: 27.10.2011
Сообщений: 249
14.05.2012, 18:59 16
C++
1
2
3
4
5
6
7
8
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  int count = 0;
  for(int i = 0; i < Memo1->Text.Length() - (Edit1->Text.Length() + 1); i++)
    if(AnsiString(Memo1->Text.c_str() + i).SetLength(Edit1->Text.Length()) == Edit1->Text)
      count++;
  Label1->Caption = IntToStr(count);
}
1
FedExpress
1 / 1 / 0
Регистрация: 30.04.2012
Сообщений: 54
14.05.2012, 19:24  [ТС] 17
Цитата Сообщение от Sergey-K Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  int count = 0;
  for(int i = 0; i < Memo1->Text.Length() - (Edit1->Text.Length() + 1); i++)
    if(AnsiString(Memo1->Text.c_str() + i).SetLength(Edit1->Text.Length()) == Edit1->Text)
      count++;
  Label1->Caption = IntToStr(count);
}
Вооот, это уже работает. Спасибо большое
0
nick42
Практикантроп
4289 / 2305 / 401
Регистрация: 23.09.2011
Сообщений: 4,928
14.05.2012, 19:27 18
Label - это строка. Хотите увидеть целое - правильнее писать так:
Код
 Label7->Caption=IntToStr(w);
0
FedExpress
1 / 1 / 0
Регистрация: 30.04.2012
Сообщений: 54
14.05.2012, 19:30  [ТС] 19
Цитата Сообщение от Sergey-K Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  int count = 0;
  for(int i = 0; i < Memo1->Text.Length() - (Edit1->Text.Length() + 1); i++)
    if(AnsiString(Memo1->Text.c_str() + i).SetLength(Edit1->Text.Length()) == Edit1->Text)
      count++;
  Label1->Caption = IntToStr(count);
}
Правда заметил неточности при подсчете. Например слово встречается 80 раз, а программа выдает 84. Так же и с другим словом: я насчитал 40 а программа выдает 50. С чем это связано?
0
14.05.2012, 19:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.05.2012, 19:30

Поиск по Memo
Как найти слово в Memo и заменить его?

Поиск в Memo ?
Здравствуйте! задача : дано Memo1 ( в нем забит текст,числа) - edit1( для...

Все слова в Memo в новой строке
Всем привет. Нужно сделать чтобы все слова в мемо были в новой строке Делаю...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru