Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > регулярное выражение


Автор: wlad110 25.6.2009, 11:56
Подскажите как удобнее получать знак числа

Код

    using namespace std;
    using namespace boost;    
    ...

    string str("-3x^2-7x+1=0"); // например имеем такое уравнение 
    //дело в том что -3 записывается в число как +3, т.е. знак перед числом игнорируется
  
    int n,d[3]={0}; // n - количество членов  d хранит a,b,c   
    regex reg("(-*\\d+)x\\^*\\d*([+-]*\\d+)x([+-]*\\d*)=*\\d*"); 
    smatch what;   
    regex_search(str,what,reg);

    what[3]==""?n=2:n=3;// проверяем есть ли "c"

    for(int i=0; i<n; ++i)
        d[i] = lexical_cast<int>(what[i+1]);

    ... 
    дальше идет решение


Можно добавлять в регулярное выражение (-*), создать дополнительные переменные для определения знака и т.п., но мб есть более простое решение ?

// блин всё оказалось просто. тема не актуальна smile

Автор: zim22 25.6.2009, 12:16
Цитата(wlad110 @  25.6.2009,  11:56 Найти цитируемый пост)
using namespace::std;

ну и как, компилится?
***
облом мне: компилится smile

Автор: wlad110 25.6.2009, 12:22
Цитата(zim22 @ 25.6.2009,  12:16)
Цитата(wlad110 @  25.6.2009,  11:56 Найти цитируемый пост)
using namespace::std;

ну и как, компилится?
***
облом мне: компилится smile

)) по запарке, потом уже дописал, чтоб ясно было откуда ф-и и объекты брал )

Автор: xvr 25.6.2009, 12:29
Вообще то уравнения лучше разбирать не регулярными выражениями. Для этого существуют грамматики, и регулярками они не описываются  smile 

Автор: wlad110 25.6.2009, 12:32
Цитата(xvr @ 25.6.2009,  12:29)
Вообще то уравнения лучше разбирать не регулярными выражениями. Для этого существуют грамматики, и регулярками они не описываются  smile

можно пример тогда?)

Автор: zim22 25.6.2009, 12:36
Цитата(wlad110 @  25.6.2009,  12:32 Найти цитируемый пост)
можно пример тогда?)

простенький пример есть в Страуструпе. на примере калькулятора. 
isbn 5-7989-0223-4
стр.148

Автор: wlad110 25.6.2009, 12:46
Цитата(zim22 @ 25.6.2009,  12:36)
Цитата(wlad110 @  25.6.2009,  12:32 Найти цитируемый пост)
можно пример тогда?)

простенький пример есть в Страуструпе. на примере калькулятора. 
isbn 5-7989-0223-4
стр.148

я его читал, но мне кажется слишком нагорожено по сравнению с моим, т.к. в уравнение может быть не больше 3 членов.
хотя я делал чтобы просто немного разобраться в регулярных выражениях и бусте, так что в любом случае своё получил =)

Автор: xvr 25.6.2009, 14:00
Простой пример - ваше исходное выражение (-3x^2-7x+1=0) может быть записанно например так:
Код

-3x^2-7x+1=0
-7x-3x^2+1=0
1-3x^2-7x=0
1-7x-3x^2=0
Если брать уравнение 2й степени в общем, то в нем вообще могут отсуствовать некоторые части
Код

-3x^2-7x=0
-3x^2+1=0
-3x-7x+1=0
-3x-7x=0
-3x+1=0
-3x=0
regexp весь этот зоопарк не возьмет

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)