• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

c++ a regex (wyrażenia regularne)

0 głosów
1,805 wizyt
pytanie zadane 17 października 2017 w C i C++ przez Shiro Stary wyjadacz (10,300 p.)
Hej, mam pytanie czy można użyć wyrażeń regularnych w warunkach w c++?

Chodzi mi o walidacje danych, user ma wprowadzić datę w formacie dd.mm.yyyy i chyba łatwiej było by sprawdzić to używając regex'a. A może jest jakaś biblioteka, która ma funkcje walidacji danych ?

Z góry dziękuje za odpowiedź i miłego dzonka Wam życzę ;)

2 odpowiedzi

0 głosów
odpowiedź 17 października 2017 przez m4sk1n Pasjonat (16,750 p.)
http://en.cppreference.com/w/cpp/regex

Tak, C++11 posiada bibliotekę od regexa.
0 głosów
odpowiedź 17 października 2017 przez Bondrusiek Maniak (61,460 p.)

Witaj,

wydaje mi się że do takiego zadania możesz użyć klasy i przeciążyć operator>>. Tutaj prosty przykład klasy Date, którą umożliwia zapisanie formatu dd.mm.yyyy:

#include <iostream>
using namespace std;
class Date {
static int lengths [12];
int day,month,year;
public:
Date ();
Date (int day,int month,int year);
Date &operator++ ();
friend bool operator< (const Date &first,const Date &second);
friend ostream &operator<< (ostream &stream,const Date &date);
friend istream &operator>> (istream &stream,Date &date); };
int Date::lengths [12]={31,28,31,30,31,30,31,31,30,31,30,31};
Date::Date (): day (),month (),year () {}
Date::Date (int day,int month,int year): day (day),month (month),year (year) {}
Date &Date::operator++ () {
lengths [1]=(year%4 ? 28 : 29);
if (++day>lengths [month-1]) {
day=1;
if (++month>12) {
month=1;
++year; }}
return *this; }
bool operator< (const Date &first,const Date &second) {
return first.year<second.year
|| (first.year==second.year && (first.month<second.month
|| (first.month==second.month && first.day<second.day))); }
ostream &operator<< (ostream &stream,const Date &date) {
return stream<<date.day<<'.'<<date.month<<'.'<<date.year; }
istream &operator>> (istream &stream,Date &date) {
char character;
stream>>date.day>>character>>date.month>>character>>date.year; }
int main () {
Date first,second;
cin>>first>>second;
for (int i=0;i<7;++i)
cout<<++(first<second ? second : first)<<endl;
return 0; }

Możesz później jeszcze użyć instrukcji if() do sprawdzenia czy wartości liczbowe są poprawne.

Pozdrawiam

komentarz 17 października 2017 przez m4sk1n Pasjonat (16,750 p.)
Czasem prościej jest użyć regexa, zależy w jakim celu potrzebuje tego op
komentarz 17 października 2017 przez Bondrusiek Maniak (61,460 p.)
Zgoda podałem tylko alternatywną możliwość. Bez kombinacji być może to się mu nie przyda tylko będzie używał wyrażeń regularnych.
komentarz 18 października 2017 przez Shiro Stary wyjadacz (10,300 p.)
Fajne, a jak zrobić to wyrażeniem regularnym ;D ?

Dziękuje Ci i pozdrawiam ;)

Podobne pytania

0 głosów
1 odpowiedź 1,095 wizyt
pytanie zadane 19 października 2017 w C i C++ przez Shiro Stary wyjadacz (10,300 p.)
0 głosów
2 odpowiedzi 1,232 wizyt
0 głosów
0 odpowiedzi 220 wizyt

93,631 zapytań

142,553 odpowiedzi

323,056 komentarzy

63,139 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 2900p. - dia-Chann
  2. 2870p. - DziarnowskiJ
  3. 2827p. - Łukasz Piwowar
  4. 2783p. - raydeal
  5. 2758p. - Adrian Wieprzkowicz
  6. 2713p. - rucin93
  7. 2579p. - Łukasz Eckert
  8. 2459p. - CC PL
  9. 2184p. - Maurycy W
  10. 2082p. - Michal Drewniak
  11. 1885p. - robwarsz
  12. 1811p. - rafalszastok
  13. 1600p. - Rafał Trójniak
  14. 1588p. - Tomasz Bielak
  15. 1494p. - ssynowiec
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...