Easyelectronics.ru

Электроника для всех
Текущее время: 21 окт 2019, 22:55

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Проверка строк
СообщениеДобавлено: 24 ноя 2015, 20:59 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3545
Откуда: Новосибирск
Как на си реализовать проверку строк? К примеру, ожидаю сообщение "DATA OK".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проверка строк
СообщениеДобавлено: 24 ноя 2015, 21:45 
Старожил
Аватара пользователя

Зарегистрирован: 18 май 2013, 20:43
Сообщения: 4341
Откуда: Кемеровская область, Киселевск
Проверяется по буквам.

_________________
RADIOWOLF.RU


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проверка строк
СообщениеДобавлено: 24 ноя 2015, 21:49 
Старожил

Зарегистрирован: 31 янв 2010, 20:19
Сообщения: 4946
Откуда: Донецк-Мариуполь
Курить мануалы по строковым функциям, типа strstr(), strcmp(), strtok() и т.д.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проверка строк
СообщениеДобавлено: 24 ноя 2015, 21:56 
Старожил

Зарегистрирован: 22 мар 2010, 22:54
Сообщения: 3995
лучше ответьте этому профи прямо, иначе он вас обвинит в троллизме или не дай бог ножичком того...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проверка строк
СообщениеДобавлено: 24 ноя 2015, 22:02 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3545
Откуда: Новосибирск
kitekat писал(а):
Курить мануалы по строковым функциям, типа strstr(), strcmp(), strtok() и т.д.

Это я уже читаю. Попробую более конкретно описать, что мне требуется. Пусть у нас набор строк.
Строка 1
Строка 2
Строка 3
В зависимости от строки нужно выполнять соответствующие действия. Какой алгоритм предпочтительнее?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проверка строк
СообщениеДобавлено: 24 ноя 2015, 22:07 
Старожил

Зарегистрирован: 27 янв 2010, 13:34
Сообщения: 2250
Откуда: Израиль
Если набор строк небольшой и содержание позволяет, то лучше проверять одну букву . Это будет намного быстрее и экономнее по ресурсам.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проверка строк
СообщениеДобавлено: 24 ноя 2015, 22:09 
Старожил

Зарегистрирован: 31 янв 2010, 20:19
Сообщения: 4946
Откуда: Донецк-Мариуполь
Ничем не отличается от того, что если вместо строк были бы числа.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проверка строк
СообщениеДобавлено: 24 ноя 2015, 22:14 
Старожил

Зарегистрирован: 22 мар 2010, 22:54
Сообщения: 3995
demiurg1978 писал(а):
Какой алгоритм предпочтительнее?
предпочтительнее для чего? как профи, задавай вопросы конкретнее.
Boltik писал(а):
Если набор строк небольшой и содержание позволяет, то лучше проверять одну букву .
а если придет мусор на букву D?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проверка строк
СообщениеДобавлено: 24 ноя 2015, 22:25 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2623
Откуда: Санкт-Петербург
Непонятна задача. Самое тупое и медленное - strcmp/strncmp.
На пачку строк хороши столь любимые вами конечные автоматы - в виде префиксного дерева.
Ещё хорошая штука - perfect hash functions (см. gperf), но, наверное, для микроконтроллерных применений таблицы могут оказаться жирноваты.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проверка строк
СообщениеДобавлено: 24 ноя 2015, 22:27 
Старожил
Аватара пользователя

Зарегистрирован: 23 янв 2012, 00:31
Сообщения: 1797
Откуда: Новокузнецк
demiurg1978 писал(а):
Как на си реализовать проверку строк? К примеру, ожидаю сообщение "DATA OK".

Команд мало, лучше сделать через strcmp (как выше сказали).

Если 1000 строк, то нужно копнуть в сторону ассоциативного массива. А там деревья.
На си++ это уже сделано, называется map

_________________
elisey.su


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проверка строк
СообщениеДобавлено: 24 ноя 2015, 22:28 
Старожил

Зарегистрирован: 10 июн 2011, 23:01
Сообщения: 3297
помимо тупого перебора всех со всеми, что, тем не менее, может оказаться самым правильным решением в зависимости от ситуации,
можно посчитать простенький хэш и сравнивать циферки.
либо хотя бы отсортировать словарь и бинарный поиск.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проверка строк
СообщениеДобавлено: 24 ноя 2015, 22:35 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3545
Откуда: Новосибирск
Хм, сколько новой информации. Уже на данном этапе тема полезна. Благодарю, народ!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проверка строк
СообщениеДобавлено: 24 ноя 2015, 22:46 
Старожил

Зарегистрирован: 27 янв 2010, 13:34
Сообщения: 2250
Откуда: Израиль
Ink писал(а):
Boltik писал(а):
Если набор строк небольшой и содержание позволяет, то лучше проверять одну букву .
а если придет мусор на букву D?

...то получится неплохой алгоритм коррекции ошибок. Пришел мусор, а алгоритм восстановил целую строку (шутка).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проверка строк
СообщениеДобавлено: 25 ноя 2015, 00:04 
Старожил

Зарегистрирован: 28 дек 2010, 23:30
Сообщения: 340
В общем случае - лексический анализатор, для конкретного случая - конкретное решение.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проверка строк
СообщениеДобавлено: 25 ноя 2015, 17:09 
Старожил

Зарегистрирован: 30 апр 2010, 22:56
Сообщения: 1580
Откуда: Киев
А чего не конечными автоматами? У Татарчевского не описано?

Алгоритм Ахо-Корасик. В свое время им АТ команды разбирал. Как раз конечные автоматы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проверка строк
СообщениеДобавлено: 25 ноя 2015, 17:17 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2623
Откуда: Санкт-Петербург
Steel.ne, Ахо-Корасик тут перебор: не надо искать подстроку, позиция начала строки известна. Хотя для общего образования его (как и другие интересные алгоритмы на КА, вроде гарантированно быстрого поиска по регэкспу) знать стОит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проверка строк
СообщениеДобавлено: 25 ноя 2015, 17:28 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3545
Откуда: Новосибирск
Steel.ne писал(а):
А чего не конечными автоматами? У Татарчевского не описано?

Меня не нужно Татарчевским тыкать. Я показываю цикл статей новичкам как стартовый подход в программировании. Да я и сам не спец в программировании. Но этот подход решает много проблем.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проверка строк
СообщениеДобавлено: 25 ноя 2015, 17:28 
Старожил

Зарегистрирован: 30 апр 2010, 22:56
Сообщения: 1580
Откуда: Киев
aamonster - если использовать КА можно буфер подсократить. Чуть ли не налету декодировать. И если известно начало строки, то можно суффиксные ссылки не использовать, автомат вручную расписать, все равно лучше будет.


Можно еще хэш вычислять. Тот же crc16/32. строки короткие и набор символов ограничен, коллизий не будет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проверка строк
СообщениеДобавлено: 25 ноя 2015, 17:32 
Старожил

Зарегистрирован: 30 апр 2010, 22:56
Сообщения: 1580
Откуда: Киев
demiurg1978 писал(а):
Steel.ne писал(а):
А чего не конечными автоматами? У Татарчевского не описано?

Меня не нужно Татарчевским тыкать. Я показываю цикл статей новичкам как стартовый подход в программировании. Да я и сам не спец в программировании. Но этот подход решает много проблем.


Если бы прочитал дальше первой фразы, то понял бы, что тыкаю не Татарчевским, а кое-чем поувесистей.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проверка строк
СообщениеДобавлено: 25 ноя 2015, 17:33 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2623
Откуда: Санкт-Петербург
Steel.ne, я про то, что конечный автомат тут будет не Ахо-Корасика, а банальное префиксное дерево.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проверка строк
СообщениеДобавлено: 25 ноя 2015, 17:50 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3545
Откуда: Новосибирск
Steel.ne писал(а):
что тыкаю не Татарчевским, а кое-чем поувесистей.

Ммм, проехали, за инфу благодарю.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проверка строк
СообщениеДобавлено: 25 ноя 2015, 18:00 
Старожил

Зарегистрирован: 30 апр 2010, 22:56
Сообщения: 1580
Откуда: Киев
aamonster, ну да. Бор, оно же префиксное дерево


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проверка строк
СообщениеДобавлено: 25 ноя 2015, 18:05 
Старожил

Зарегистрирован: 30 апр 2010, 22:56
Сообщения: 1580
Откуда: Киев
demiurg1978 писал(а):
Ммм, проехали, за инфу благодарю.


По поводу хэш-функций был неплохой обзор:
http://habrahabr.ru/post/219139/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проверка строк
СообщениеДобавлено: 05 дек 2015, 07:48 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3545
Откуда: Новосибирск
Реализовал свою задачу так:
Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проверка строк
СообщениеДобавлено: 05 дек 2015, 11:41 
Старожил

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2866
сложно-читаемый код. Очистку буфера можно делать через memset, хотя при работе со строками достаточно поставить "\0", т.к. по нему определяется конец строки. При работе с массивом структур во флеше (видимо тут IAR) на GCC, я делал еще одну структуру-буфер, но в оперативке, и в цикле копировал (memcpy_PF) туда каждый элемент массива структур, с которой потом работал.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB