Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
844 / 739 / 342
Регистрация: 22.09.2012
Сообщений: 5,034

Оптимизировать часть кода: упростить и сделать меньше строк

22.02.2013, 17:31. Показов 1082. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем код такой но он не полный это тока его часть и там все одно по одному повторяется
и этот код слишком большой если массив строк достигнет ло 100. Вопрос такой код не как не упростить? ли есть варианты ну хотя бы чуть чуть егог попроще сделать?
C++
1
2
3
4
5
6
7
8
9
10
11
String slovo[100]; //обьявляем массив
String E = Memo1->Text; //текст из мемо в переменную
Memo1->Text = E.LowerCase(); //приводит все к нижнему регистру в мемо1
E = E.LowerCase(); //в нижний регистр делаем в переменной
int pos = E.Pos("прив"); //найти точку вхождения в слово
slovo[0] = E.SubString(pos,4); //занести в переменную прив
if(slovo[0] == "прив")Edit1->Text = "Ну здорова коли не шутиш";
 
int pos2 = E.Pos("пока");
slovo[1] = E.SubString(pos2,4);
if(slovo[1] == "пока")Edit1->Text = "Ну давай заходи еще как нить";
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.02.2013, 17:31
Ответы с готовыми решениями:

Помогите пожалуйста оптимизировать эту часть кода?
FPrivateCard.DBEdit1.DataSource:=Datasource1; FPrivateCard.DBEdit2.DataSource:=Datasource1; ...

Упростить часть кода в сумме двух списков
Дан список (a1, a2,…, aN). Вычислить значение выражения- max(a2,a4,…)+min(a1,a3,…). Рабочий код: (defun x (list index f element) ...

Выкладываю часть кода моей программы, хочу чтобы вы мне указали где что лучше здесь оптимизировать исправить
Здравствуйте, я недавно в программировании на C# поэтому тонкостей не знаю, выкладываю часть кода моей программы, хочу чтобы вы мне указали...

11
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
22.02.2013, 17:43
C++
1
2
3
4
5
6
7
8
String slovo;
Memo1->Text = Memo1->Text.LowerCase(); //приводит все к нижнему регистру в мемо1
int pos = Memo1->Text.Pos("прив"); //найти точку вхождения в слово
slovo = Memo1->Text.SubString(pos,4); //занести в переменную прив
if(slovo == "прив")Edit1->Text = "Ну здорова коли не шутиш";
pos = Memo1->Text.Pos("пока");
slovo = Memo1->Text.SubString(pos,4);
if(slovo == "пока") Edit1->Text = "Ну давай заходи еще как нить";
Убрали массив, убрали переменную E, убрали pos2. Если не нравится частое использование Memo1->Text, можно добавить ссылку.
1
844 / 739 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
22.02.2013, 18:32  [ТС]
Спс , уже избавились от лишнего!
C++
1
2
3
pos = Memo1->Text.Pos("бот");
slovo = Memo1->Text.SubString(pos,3);
if(slovo == "бот") Edit1->Text = "Сам ты бот на себя сначала посмотри";
Самое главное массив тут можно и на самом деле отменить? И в строку одну все запоминать (сча прост с тела зашел немогу попробовать временно) ? У меня просто словарь будет заполняться ну хотя бы вариантов на 100 я так прогнозирую. Это типо чета бота будет на чате, ну не серверного конечно а внешнего, ну тут и по коду уже понятно что бот будет не серверный .
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
23.02.2013, 14:32
Тебе нужно два списка строк - нашел совпадение ключа в первом, выдал ответную строчку из второго с той же позиции. Цикл в пять строк...
1
844 / 739 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
25.02.2013, 17:47  [ТС]
Цитата Сообщение от BRcr Посмотреть сообщение
Тебе нужно два списка строк - нашел совпадение ключа в первом, выдал ответную строчку из второго с той же позиции. Цикл в пять строк...
Да как то так вы правы
C++
1
2
3
pos = Memo1->Text.Pos("бот");
slovo = Memo1->Text.SubString(pos,3);
if(slovo == "бот") Edit1->Text = Мемо2->Линия->Стринг[7]; //грузим в эдит 7 строку
Можно так
C++
1
2
3
[CPP]pos = Memo1->Text.Pos("бот");
if(pos>0) //значит слово найдено иначе нам вернули бы ноль
Edit1->Text = Мемо2->Линия->Стринг[7]; //грузим в эдит 7 строку
[/CPP]
...и таких строк много которые отловить нужно и соответствующее сообщение в Эдит отослать.
Так вот вопрос главный в чем встал, если в Мемо1-поле находится только одно искомое слово из всего большого списка - то код сработает всегда и правильно сработает.

Но если в Мемо1-поле есть и "прив" и "пока" и "бот" - то непонятно какое же значение переменная схватит, по практике она хватает не понятно какое , толи код нашел слово и сразу в Эдит кинул мне одно значение, толи он как цикл пошел дальше и ищет другие совпадения и в Эдит кидает уже совсем другое?...

Че еще заметил переменная типа Стринг не может одно слово 2 раза поймать, Один раз поймала "прив" кинула мне в эдит текст соответсвющий, но если в Мемо1-поле появилось еще раз слово "прив" на него код уже не среагирует никак. Не знаю почему.

Добавлено через 4 минуты
Вобще алгоритм кода такой :
Ищем самое верхнее совпадение (именно то которое выше всего в мемо1-поле) из набора (из моего массива)
И кидаем Ответ на это в Эдит.
Но все че непробовал - все с ошибками работает...

Добавлено через 11 минут
Чтоб была обработка входящих фраз и в замисимости от каких то слов был определенный ответ.
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
25.02.2013, 18:52
Глянь здесь - Ответ в зависимости от условия

Ищем каждый из ключей в мемо, если нашли - выдаем ответ как значение по данному ключу в map'е...
0
844 / 739 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
26.02.2013, 13:52  [ТС]
С map -ом трудно разобраться, наверн все таки проще в цикл как то это будет оформить.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
26.02.2013, 14:21
Цитата Сообщение от NIKOLAYY Посмотреть сообщение
С map -ом трудно разобраться
В чем проблема?
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
26.02.2013, 16:04
Где там трудно разбираться-то? Скажи лучше, что неохота.
Маленький шаблонный класс с парой десятков методов - при условии прочтения справки путаться просто негде.

Если есть конкретные вопросы, выкладывай.
1
844 / 739 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
26.02.2013, 23:29  [ТС]
Я как сказать у меня сложная задача с map я просто несталкивался, задачада конкретная, Есть у меня какой-то список (построчно) например

значение1
значение2
значение3

И есть ответы на эти значения (тоже построчно)

ответ1
ответ2
ответ3

Ну засунул я например эти списки (все значения) в мемо1 (все ответы) вмемо2

И все было бы просто если я сам выбирал бы эти значения ткнул на значение3 и получил тут же ответ3 значение3=ответ3
Но проблема в том что программа должна ткнуть (выбрать значение) а она не знает как правильно ткнуть.

А ткнуть она должна так:
В мемо3 находится куча текста- именно в мемо3 эта куча текста, программа должна пробежаться по этому тексту сверху вниз и как только она поймает значение1 или значение3 или значение15 (которое находится в строках мемо1) - она должна остановиться, не бегать ниже по мемо3 полю а выдать ответ.
Поймано значение 15- выдан ответ15.
Если ниже по мемо3 полю бежать там будут еще значения совпадающие из списка в мемо1 но они уже не нужны!

Задача в общем сложная. Думаю map с этим не справится.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
27.02.2013, 00:06
Цитата Сообщение от NIKOLAYY Посмотреть сообщение
Задача в общем сложная
Да не такая уж и сложная: загоняете свою кучу текста в виртуальный список - StringList (для ускорения; с мэмо медленее). Затем в цикле ищете совпадения строки-образца (из мэмо1) с очередной строкой списка (конструкция Pos()). Совпало - из мэмо2 извлекаете ответ в строке под номером текущей строки мэмо1. И всю эту музыку оформляете как вам хочется. Циклическую итерацию можно прекращать (break), и переходить к следующему индексу цикла по мэмо1.
1
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
27.02.2013, 16:02
map сортирует ключи, а тебе надо именно по порядку, как в списке искать, если я правильно понимаю. Тут бы в самый раз unordered_map, но у тебя ее, вероятнее всего, нет...

Вот так на возможностях TStrings можно сделать:
C++
1
2
3
4
5
6
7
8
9
10
    std::auto_ptr <TStringList> lst( new TStringList( ) );
    lst->Add( "прив=Ну здорова коли не шутиш" );
    lst->Add( "пока=Ну давай заходи еще как нить" );
 
    for ( size_t i = 0; i < lst->Count; ++i ) {
        if ( memo->Text.Pos( lst->Names[i] ) ) {
            ShowMessage( lst->Values[lst->Names[i]] );
            break;
        }
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.02.2013, 16:02
Помогаю со студенческими работами здесь

Как оптимизировать программу, чтобы она использовала меньше оператиной памяти и меньше загружала процессор
Есть ли какие-либо средства для оптимизации программы в Visual Studio 2010? Как оптимизировать программу, чтобы она брала меньше оператиной...

можете подсказать как сделать часть кода
Можете подсказать как в определенном процессе найти определенный string и изменить его ? Буду очень благодарен за помощь.

Как сделать паузу в JavaScript на часть кода?
Например setTimeout(function() { alert(&quot;сообщение 1&quot;); }, 5000); alert(&quot;сообщение 2&quot;); Выводится с начало &quot;сообщение...

Как можно сделать данный кусок кода меньше и проще?
Задние: Заменить все элементы с четными номерами на значение второго положительного элемента массива. void change() //замена элементов...

Как упростить/оптимизировать js?
Друзья в js понимаю мало, написал вот такой код https://jsfiddle.net/adash/8h3L2thk/ первая и вторая часть кода абсолютно идентичны,...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru