Russian Qt Forum
Января 17, 2025, 23:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Распознание текста parser  (Прочитано 9627 раз)
daimon
Гость
« : Января 01, 2010, 20:39 »

Как распознать такую строку "2,2". Стандартный функций С++ такой нет (есть для 2.2)?
Записан
GNU Dimarik
Гость
« Ответ #1 : Января 02, 2010, 01:33 »

Что значит рапознать? Разобрать? Почитай про рекурсивынй спуск. Если лень самому,попробуй boost::spirit,но он требует хорошего знания С++, шаблонов особенно + долго компилиться.
Многие считают его злом,потому,что им трудно с ним разбираться,отладка действительно становиться чем то неприятным.
В общем то написать какой нить калькулятор можно и самому (без spirit),это не трудно.
Так же я за рекурсивный спуск,потому,что он позволяет выполнять операторы правильно (я имею в виду приоритеты) за счет своей рекурсивной природы.
А вообще что то я разогнался,ты объясни,что значит распознать,может я не так тебя понял
Записан
daimon
Гость
« Ответ #2 : Января 02, 2010, 01:49 »

Что значит рапознать? Разобрать? Почитай про рекурсивынй спуск. Если лень самому,попробуй boost::spirit,но он требует хорошего знания С++, шаблонов особенно + долго компилиться.
Многие считают его злом,потому,что им трудно с ним разбираться,отладка действительно становиться чем то неприятным.
В общем то написать какой нить калькулятор можно и самому (без spirit),это не трудно.
Так же я за рекурсивный спуск,потому,что он позволяет выполнять операторы правильно (я имею в виду приоритеты) за счет своей рекурсивной природы.
А вообще что то я разогнался,ты объясни,что значит распознать,может я не так тебя понял
у меня есть спуск и проблема с распознанием чисел с запятой. Для точки есть методы распознания строк, а для запятой не видел.
Записан
daimon
Гость
« Ответ #3 : Января 02, 2010, 01:53 »

boost::spirit в MSDN нет
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #4 : Января 02, 2010, 02:01 »

>>boost::spirit в MSDN нет
чтоб он делал в MSDN'е? Boost сам по себе (кроссплатформенный), а MSDN сам по себе (чисто мелкософтные примочки). Если речь не идёт о Виндовозном API не заглядывай в MSDN.
Записан

Юра.
daimon
Гость
« Ответ #5 : Января 02, 2010, 02:06 »

понял. Как сложно написать под эту библиотеку парсер алгебраических выражений с переменными и функциями?
Переменные можна объявлять при работе выражения, а функции прописаны в коде. Выражения могут содержать уйму действий и операций -+^/ и т.д.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #6 : Января 02, 2010, 02:08 »

daimon, про такой парсер уже много раз вспоминали. Есть например на Qt-apps программа, кто-то делал курсовик. Можно поизучать её код.
Есть темы на форуме, стоит поискать.
Записан

Юра.
daimon
Гость
« Ответ #7 : Января 02, 2010, 02:09 »

daimon, про такой парсер уже много раз вспоминали. Есть например на Qt-apps программа, кто-то делал курсовик. Можно поизучать её код.
Есть темы на форуме, стоит поискать.
в том то и дело, что я делаю этот курсовик с парсером - там свой парсер (в Шилдте)
Записан
vaprele07
Гость
« Ответ #8 : Января 02, 2010, 06:26 »

Код:
#include <locale>
...
setlocale(LC_ALL,"Ru_RU");
char test[10];
sprintf(test, "3,26");
qDebug() << atof(test);
Записан
daimon
Гость
« Ответ #9 : Января 02, 2010, 11:18 »

Код:
#include <locale>
...
setlocale(LC_ALL,"Ru_RU");
char test[10];
sprintf(test, "3,26");
qDebug() << atof(test);
atof не распознает "2,1"
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #10 : Января 02, 2010, 16:09 »

Если всетаки пишешь на Qt, то взгляни на QLocale::toDouble(...)
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
ilot
Гость
« Ответ #11 : Января 03, 2010, 08:39 »

у меня есть спуск и проблема с распознанием чисел с запятой. Для точки есть методы распознания строк, а для запятой не видел.
Если пишешь собственный парсер, то логично реализовывать собственные методы распознавания примитивов. Лексический анализатор разбирает исходный текст, выдавая на выходе поток лексем. Например, выражение "2,2" будет состоять из следующих лексем: "2", "," и "2". Синтаксический анализатор на основе полученного потока лексем распознает примитивы языка (правила интерпретации полностью определяются программистом). В данном случае программируется, что два целых разделенных запятой интерпретируются как одно действительное число. Так что, если стоит задача разработки собственного парсера никакой проблемы не вижу.
P.S. Почитайте какую-нибудь хорошую книжку, посвященную трансляции.
Записан
merke
Гость
« Ответ #12 : Марта 22, 2010, 20:16 »

читай про польскую натацию и будет тебе рай
Записан
daimon
Гость
« Ответ #13 : Мая 23, 2010, 10:50 »

читай про польскую натацию и будет тебе рай
решил проблему - меняю локализацию на rus и strtod всё распознает
(а в GUI поставил галочку на разделитель целой и дробной части: точка или запятая)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.161 секунд. Запросов: 22.