С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 2
Регистрация: 14.10.2015
Сообщений: 47

Проверка текста в Мemo на наличие символов из списка

08.12.2017, 15:09. Показов 2078. Ответов 5
Метки memo (Все метки)

Студворк — интернет-сервис помощи студентам
Ребята, вообще голову сломал, не работает ничего.. Как проверить текст в МЕМО на наличие символов, которые в списке (список я запихал в другое МЕМО) - что касается символов, это китайские иероглифы
Суть программы, чтобы человек ввел текст в мемо, а при нажатии на кнопку, прошла проверка данного текста на наличие иероглифов из списка, и если там встречаются эти иероглифы, просто подсчитать, сколько раз встретились одинаковые символы - как сделать?? помогите люди добрые
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.12.2017, 15:09
Ответы с готовыми решениями:

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

Проверка на наличие символов
Как написать функцию которая проверяет наличие символов (A-Z, a-z, 0-9) в строке и если есть любые другие то ошибка?

Проверка списка на наличие элемента
Дано 2 списка x и y, проверить содержит ли он число 2, вывести список, если содержит. Если не содержит, то вывести "Список не содержит...

5
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
08.12.2017, 15:19
Показывайте, что и как делали.
1
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
08.12.2017, 15:20
А что тут трудного? И зачем второе Memo? Скажем, для одного символа, введенного в Edit весь процесс выльется в__
C++
1
2
3
4
5
6
7
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    int Sum = 0;
    for(int i=1;i<Memo1->Text.Length();i++)
      if(Edit1->Text.Length() && Memo1->Text[i]==Edit1->Text[1]) Sum++;
    Label1->Caption = Sum;
}
(В вашем случае двухбайтовые символы юникода, но принцип тот же).
1
0 / 0 / 2
Регистрация: 14.10.2015
Сообщений: 47
08.12.2017, 21:26  [ТС]
Здравствуйте, пытался вытворить все это дело таким кодом
C++
1
2
3
4
5
int count = 0;
  for(int i = 0; i < MemoHSK1->Lines->Count; i++) {
  for(int j = 0; j < (Memo1->Text.Length() + 1); j++) {
    if (MemoHSK1->Lines->Strings[i] == Memo1->Lines->Strings[1][j])   {
      count++; }}
Не получается..
Вообщем, такая ситуация, в мемо расположен список иероглифов (один иероглиф с новый строки, то есть
C++
1
MemoHSK1->Lines->Strings[1]
тут первый иероглиф стоит и так далее

В мемо1 пользователь вставляет текст (из иероглифов естественно), и надо перебрать в этом тексте каждый иероглиф, и сверить его со списком (есть ли он так или нет)

Пока что мой этот код
C++
1
2
3
4
5
int count = 0;
  for(int i = 0; i < MemoHSK1->Lines->Count; i++) {
  for(int j = 0; j < (Memo1->Text.Length() + 1); j++) {
    if (MemoHSK1->Lines->Strings[i] == Memo1->Lines->Strings[1][j])   {
      count++; }}
как я поимаю сравнивает только первый символ в мемо1, как сделать так, чтобы перебирались все иероглифы из мемо1?

Добавлено через 15 секунд
Здравствуйте, пытался вытворить все это дело таким кодом
C++
1
2
3
4
5
int count = 0;
  for(int i = 0; i < MemoHSK1->Lines->Count; i++) {
  for(int j = 0; j < (Memo1->Text.Length() + 1); j++) {
    if (MemoHSK1->Lines->Strings[i] == Memo1->Lines->Strings[1][j])   {
      count++; }}
Не получается..
Вообщем, такая ситуация, в мемо расположен список иероглифов (один иероглиф с новый строки, то есть
C++
1
MemoHSK1->Lines->Strings[1]
тут первый иероглиф стоит и так далее

В мемо1 пользователь вставляет текст (из иероглифов естественно), и надо перебрать в этом тексте каждый иероглиф, и сверить его со списком (есть ли он так или нет)

Пока что мой этот код
C++
1
2
3
4
5
int count = 0;
  for(int i = 0; i < MemoHSK1->Lines->Count; i++) {
  for(int j = 0; j < (Memo1->Text.Length() + 1); j++) {
    if (MemoHSK1->Lines->Strings[i] == Memo1->Lines->Strings[1][j])   {
      count++; }}
как я поимаю сравнивает только первый символ в мемо1, как сделать так, чтобы перебирались все иероглифы из мемо1?
0
 Аватар для keltor
38 / 36 / 25
Регистрация: 25.01.2017
Сообщений: 151
Записей в блоге: 2
09.12.2017, 03:20
Сложно понять что человеку нужно, но может так подойдет?
3Мемо и 1 кнопка на форму.

В 1 мемо введены строки которые ищет (если надо пословно чтобы искало, сами извлекайте слова из строк)
Во 2 мемо введен текст. Строка из первого мемо ищется во всем тексте второго мемо. Ригистр буквы значение имеет!
Если надо чтобы не имел, то есть функция AnsiUpperCase или AnsiLowerCase. В общем все надо привести к одному регистру, а потом искать.

Вместо Memo я бы Вам рекомендовал работать с RichEdit, там удобней и выделять можно то, что нашел. И жирненьким и курсивом.


Unit1.h

Кликните здесь для просмотра всего текста
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
//---------------------------------------------------------------------------
 
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TMemo *Memo1;
    TMemo *Memo2;
    TMemo *Memo3;
    TButton *Button1;
    void __fastcall Button1Click(TObject *Sender);
    void __fastcall FormCreate(TObject *Sender);
private:    // User declarations
public:     // User declarations
    __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


Unit1.cpp
Кликните здесь для просмотра всего текста
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    int i,j,count;
    //2 переменные ниже введены для читабельности кода, они необязательны
    AnsiString str="";
    int strlen=0;
 
    for (i = 0; i < Memo1->Lines->Count; i++)
    {
    count=0;
    str=Memo1->Lines->Strings[i];
    str = LowerCase(Trim(str));
    strlen=str.Length();
 
    Memo3->Lines->Add("str= " + str);
        for (j = 0; i < Memo1->Lines->Strings[j].Length(); j++) {
        if (IsDelimiter(str,Memo1->Lines->Strings[j],j))
            {
            count++;
            }
        }
    Memo3->Lines->Add("Слово "+str+ " встречается "+count+ " раз");
    }
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Memo1->Text="";
Memo2->Text="";
Memo3->Text="";
Memo1->Lines->Add("папа");
Memo1->Lines->Add("Вася");
Memo1->Lines->Add("асфальт");
Memo1->Lines->Add("видано");
 
Memo2->Lines->Add("Папа у Васи силён в математике,");
Memo2->Lines->Add("учится папа за Васю весь год.");
Memo2->Lines->Add("Где это виданно, где это слыханно-");
Memo2->Lines->Add("Папа решает, а Вася сдает.");
Memo2->Lines->Add("Мелом расчерчен асфальт на квадратики,");
Memo2->Lines->Add("Манечка с Танечкой прыгают тут,");
Memo2->Lines->Add("Где это видано, где это слыхано,");
Memo2->Lines->Add("В классы играют, а в класс не идут?");
}


Добавлено через 3 часа 1 минуту
Сори, неправильный файлик скопировал. Вот последний вариант

Кликните здесь для просмотра всего текста
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString S="";
AnsiString D="";
int i=0, j=0,count=0, dlen=0;
 
Memo3->Lines->Add("Поиск в "+IntToStr(Memo2->Lines->Count)+" строках Мемо2");
 
for (i = 0; i < Memo1->Lines->Count; i++)
{
D=Memo1->Lines->Strings[i];
dlen=D.Length();
Memo3->Lines->Add("ищем "+ D);
count=0;
 
    for (j = 0; j < Memo2->Lines->Count; j++)
    {
    S=Memo2->Lines->Strings[j];
    Memo3->Lines->Add("в строке "+ S);
 
 
        while (AnsiPos(D,S))
            {
            S.Delete(1,AnsiPos(D,S)+dlen);
            Memo3->Lines->Add(S);
            count++;
            }
     }
Memo3->Lines->Add("Слово "+D+" найдено "+count+" раз");
}
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Memo1->Lines->Clear();
Memo2->Lines->Clear();
Memo3->Lines->Clear();
Memo3->ScrollBars=ssVertical;
Memo1->Lines->Add("папа");
Memo1->Lines->Add("Вася");
Memo1->Lines->Add("асфальт");
Memo1->Lines->Add("видано");
 
Memo2->Lines->Add("Папа у Васи силён в математике,");
Memo2->Lines->Add("учится папа за Васю весь год.");
Memo2->Lines->Add("Где это видано, где это слыханно-");
Memo2->Lines->Add("Папа решает, а Вася сдает.");
Memo2->Lines->Add("Где это видано, где это слыханно-");
Memo2->Lines->Add("Папа решает, а Вася сдает.");
Memo2->Lines->Add("Мелом расчерчен асфальт на квадратики,");
Memo2->Lines->Add("Манечка с Танечкой прыгают тут,");
Memo2->Lines->Add("Где это видано, где это слыхано,");
Memo2->Lines->Add("В классы играют, а в класс не идут?");
Memo2->Lines->Add("Где это видано, где это слыхано,");
Memo2->Lines->Add("В классы играют, а в класс не идут?");
Memo2->Lines->Add("Где это видано, где это слыхано,");
Memo2->Lines->Add("В классы играют, а в класс не идут?");
 
}
//---------------------------------------------------------------------------


Хотя для поиска китайского иероглифа IsDelimiter подходит вроде тоже.
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,362
Записей в блоге: 3
12.12.2017, 09:11
keltor, какие, интересно, могут быть
Цитата Сообщение от keltor Посмотреть сообщение
AnsiUpperCase или AnsiLowerCase
, если у ТС-а текст в иероглифах, т.е., однозначно, юникодная кодировка?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.12.2017, 09:11
Помогаю со студенческими работами здесь

Проверка на наличие текста
дано две строки. в первой - возможны значения &quot;A&quot;, &quot;B&quot;, &quot;C&quot;. во второй - записаны числа. требуемый результат - в отдельных ячейках...

Проверка на наличие символов в строке
Есть изначальный код в htaccess: RewriteEngine On RewriteCond %{ENV:REDIRECT_STATUS} ^$ RewriteRule !(^$|.*\.(css|jpg|gif))...

Проверка строки на наличие символов
Написал функцию для проверки строки, если в ней есть любые символы, мешающие преобразовать ее в число типа double. using System; ...

Проверка пароля на наличие символов
День добрый. Есть примерно такой код if (preg_match('/^*$/u', $email)) die(&quot;Пароль должен содержать хотя бы одну цифру и цифру&quot;); ...

Проверка на наличие посторонних символов
Как проверить есть ли в textBox`e посторонние символы, кроме вот этих: string symbols =...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru