Ai învățat programare și ți-ai dat seama că te pricepi să le explici colegilor tăi mai mici tot felul de noțiuni din informatică, pe limba lor. De fiecare dată când cineva se plânge că o noțiune e "prea abstractă", îi vii în ajutor cu un exemplu concret.
Astăzi, fratele tău mai mic a venit de la facultate trist și ai aflat că toată ziua s-a chinuit să înțeleagă expresiile regulare. Ba mai mult, el susține că la finalul laboratorului li s-a dat să scrie un program care primește un șir de caractere (îl vom nota sir) și un șir de n cuvinte și afișează numărul de cuvinte care se potrivesc cu expresia regulară sir.+. De exemplu, dacă sir are valoarea "ana", cuvintele trebuie să se potrivească cu expresia regulară ana.+.
Te-ai hotărât să îl ajuți și ai început să citești despre expresiile regulare ca să înțelegi cerința problemei. Expresia dată e de tip POSIX extended, găsești aici mai multe despre cum funcționează.
Scrie un program care rezolvă problema de mai sus, pentru a înțelege mai bine expresiile regulare și a putea să îi răspunzi fratelui tău la întrebări.
Date de intrare
Programul va citi de pe prima linie numărul natural n, reprezentând numărul de cuvinte din listă, de pe linia următoare șirul de caractere care reprezintă începutul expresiei regulare, conform cerinței de mai sus, iar de pe următoarele n linii câte un singur cuvânt format doar din litere mici ale alfabetului englez.
Date de ieșire
Pe ecran se va afișa numărul de cuvinte care se potrivesc cu expresia regulară construită cu primul șir de caractere citit, conform cerinței.
Restricții și precizări
1 ≤ n ≤ 50.
fiecare cuvânt va conține maxim 100 de caractere.
toate liniile citite, în afară de prima, sunt formate din litere mici ale alfabetului englez.
Exemplu
Date de intrare Date de ieșire
5 2
pre
preadmitere
eprezicere
pre
prezentare
practica
O indrumare cum sa fac problema cu expresii regulare.
VxF:
În ce limbaj de programare?
Răspunsuri la întrebare
Răspuns de
1
Răspuns:
#include <iostream>
#include <string>
#include <regex>
int main()
{
std::regex expresieRegulara;
std::string inceput, cuvant;
int n, sePotrivesc = 0;
std::cout << "Număr cuvinte: ";
std::cin >> n;
std::cin.get();
std::cout << "Început cuvânt: ";
std::cin >> inceput;
expresieRegulara = std::regex(inceput + ".+.");
std::cout << n << " cuvinte: ";
for (int i = 0; i < n; i++) {
std::cin >> cuvant;
if (std::regex_match(cuvant, expresieRegulara)) {
sePotrivesc++;
}
}
std::cout << "Număr potriviri: " << sePotrivesc << std::endl;
}
Explicație:
#include
using namespace std;
const int MAX_LENGHT = 100;
int main() {
char pref[MAX_LENGHT], sir[MAX_LENGHT];
int n, counter = 0;
cin >> n;
cin >> pref;
for (int j = 0; j < n; j++){
cin >> sir;
if(sir[i] == pref[i] && strlen(sir) > strlen(pref)){
++counter;
}
}
cout << counter << '\n';
return 0;
}
Dar, nu este ok, cred ca trebuie cu strcmp . Imi poti da o idee cum sa folosesc aceasta functie ?
Alte întrebări interesante
Limba română,
8 ani în urmă
Limba română,
8 ani în urmă
Franceza,
8 ani în urmă
Matematică,
8 ani în urmă
Engleza,
8 ani în urmă
Istorie,
9 ani în urmă