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

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

08.12.2017, 15:09. Показов 2115. Ответов 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
9921 / 6457 / 2457
Регистрация: 21.01.2014
Сообщений: 27,405
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru