Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: C++ - regularni vyrazy  (Přečteno 4445 krát)

LorD_OniX

  • Návštěvník
  • Příspěvků: 50
C++ - regularni vyrazy
« kdy: 23 Června 2009, 22:05:53 »
Ahoj, potreboval bych poradit od vas co to pouzivate, odkud jste cerpali nejake informace nebo kterou knihovnu pouzivate. Vim ze se daji pouzivat i regularni vyrazy pod C, ale radeji mam C++ a pouziti stringu.

Treba na teto adrese je priklad:
Kód: [Vybrat]
http://www.johndcook.com/cpp_regex.htmlale ten se neda prelozit a nefunguje.

Vim ze existuje boost library, rcpe co pouzivate vy a co je predevsim v zakladni instalaci knihoven c++ ? Moc diky za odpovedi nebo odkazy.

jfoot

  • Aktivní člen
  • *
  • Příspěvků: 197
  • ..nemožné ihned, zázraky do tří dnů...
Re: C++ - regularni vyrazy
« Odpověď #1 kdy: 24 Června 2009, 12:50:04 »
Zdravím Vás,

podle množství odpovědí na Váš dotaz a sloganu "Jeden proráží, ostatní následují",
Vy bude asi ten první.. ;D ,což Vás samozřejmě šlechtí.

Já v C++ neprogramuji, ale podle mých zkušeností s regulárními výrazy z jiných jazyků
se vyplatí instalovat balík, který vychází z Perlu (třeba xslt 2.0 používá odvozeninu
funčností právě z Perlu, Java do jisté míry také).

Základní balík pro práci s regulárními výrazy v C++ by měl být v "základu" Ubuntu.
Viz třeba zde :   http://packages.ubuntu.com/hardy/libboost-regex-dev.
Já s instalací zkušenost nemám, ale zde se jistě najde někdo schopnější, kdo Vám poradí,
jakmile se do instalace pustíte.

Mrkněte také zde (třeba zde něco najdete) : http://ubuntuforums.org/archive/index.php/t-1114404.html

Po šesté atomové válce  povrch planety Rogoz nevypadal pěkně...

Dítě nevinné...Co ty můžeš vědět...o sadomasochistické derivaci oidipovského komplexu...(O.Neff, K. Saudek, Arnal & Dva dračí zuby)

nettezzaumana

  • Host
Re: C++ - regularni vyrazy
« Odpověď #2 kdy: 24 Června 2009, 13:03:51 »
man pcrecpp

Břeťa Král

  • Návštěvník
  • Příspěvků: 58
  • Jsem takový, jaký jsem
Re: C++ - regularni vyrazy
« Odpověď #3 kdy: 21 Září 2009, 19:09:47 »
Zdravím
chtěl bych se zeptat, co dělám špatně při vkládání regulárních výrazů do kodu C++ programu. C++ se učím a na tohle jsem zatím nepřišel

Kód: [Vybrat]
#include <iostream>
#include <array>
#include <regex>

using namespace std;
void main()
{
 int cislo;
 cout > cislo;

  if(cislo == @"^\d[ 0 - 9 ]$"){
      for(int i = 0; i < cislo; i++){
         cout << "Hello C++" << endl;
      }
  }
   else
  {
        cout << "nezadali jste cislo!" << endl;
   }



 /* to pole jsem si vymyslel, abych zjistil jak na nej */
double pole[24];
for(int j = 1; j < 24; j++){
pole[j];
double g = 3.14159 + 2*2;
pole[j] = g;
cout << pole[j] << endl;
}
}

mělo by to dělat to, že když zadám něco jiného než číslo, tak mi vypíše hlášku, že jsem nezadal číslo a pak pokračovat k poli (to jsem si vymyslel jen tak, abych zjistil jak na to  )
musím dělat ve visual studiu, mame to ve skole a ucitel to chce

prosím neukamenujte mě, jsem nováček

jfoot

  • Aktivní člen
  • *
  • Příspěvků: 197
  • ..nemožné ihned, zázraky do tří dnů...
Re: C++ - regularni vyrazy
« Odpověď #4 kdy: 21 Září 2009, 20:36:18 »
Zdravím Vás,

nejsem znalý C++ code, nicméně pokud se podívám na část code týkající se regulárního výrazu, tak minimálně :
a) definice character  class pro match pouze číslic je [0-9], ne [ 0 - 9 ]
b) také jsem nenašel rozumný quantifier za character class, který by měl být, minimálně,
    znak '?' nebo '*' nebo '+'

Čili to, co hledáte, by mohlo vypadat takhle : [0-9]+, samozřejmě je nutno zasadit to do kontextu C++.
Btw, Vy máte navíc použit znak '^' na začátku reg. výrazu, což jinak znamená, že aby nastal match (omlouvám se za příšernou češtinu)  musí daná proměnná <<cislo>> začínat číslicemi, ne např. znakem 'mezera', což může být (to je na diskusi) na vstup dat z klávesnice zbytečné omezení...

Moje osobní skušenost je nebýt na uživatele zbytečně přísný a umožnit mu při vstupu dat vytvářet chyby typu "zavadil jsem o klávesnici nosem... ( a stisknul tím nechtěně klávesu TAB, či SPACE, či CTRL+ALT+DEL.. ;D ;D ;D).." , než mu ve smyčce "nadávat" že  "Nastala chyba při zadávání dat", aniž by věděl, jaké že to chyby se dopustil... ;)
« Poslední změna: 22 Září 2009, 11:28:08 od jfoot »
Po šesté atomové válce  povrch planety Rogoz nevypadal pěkně...

Dítě nevinné...Co ty můžeš vědět...o sadomasochistické derivaci oidipovského komplexu...(O.Neff, K. Saudek, Arnal & Dva dračí zuby)

 

Provoz zaštiťuje spolek OpenAlt.