fbpx

Problema #1009 – Cuvinte3 – Rezolvari PBInfo

de Mihai-Alexandru

Cerința

Se consideră un text alcătuit din mai multe linii, în care cuvintele sunt separate prin spatii și caractere din setul .,;:-?!. Să se determine cuvintele distincte din text care conţin subşirul ate, fără a face distincţie între litere mari şi mici.

Date de intrare

Fișierul de intrare cuvinte3.in conține textul dat.

Date de ieșire

Fișierul de ieșire cuvinte3.out va conține mai multe linii; pe fiecare linie se află câte un cuvânt distinct din textul dat care conține subșirul ate.

Restricții și precizări

  • fiecare linie din fișierul de intrare va avea cel mult 255 de caractere
  • ordinea de afișare a cuvintelor este cea din textul dat
  • dacă un cuvânt apare în text de mai multe ori (fără a face distincţie între litere mari şi mici) se va afișa în fișierul de ieșire prima sa apariție
  • în fișierul de intrare sunt cel mult 100 de cuvinte distincte care conține subșirul ate

Exemplu

cuvinte3.in

Daca satelitii nu sunt activi, GPS-ul nu functioneaza... - Ai vazut cate cuvinte marcate sunt?? Poate esti si tu atent! Cate sunt?

cuvinte3.out

satelitiicatemarcatePoateatent
#include <bits/stdc++.h>

using namespace std;
ifstream fin("cuvinte3.in");
ofstream fout("cuvinte3.out");
char m[505][256];
int n;

void to_lower(char p[])
{
for(int i = 0 ; p[i] ; i++)
p[i] = tolower(p[i]);
}

bool verif(char p[])
{
char t[256];
strcpy(t , p);
to_lower(t);
if( strstr(t , "ate") )
return true;
return false;
}

bool egale(char a[] , char b[])
{
char s1[256], s2[256];
strcpy(s1, a);
strcpy(s2 , b);
to_lower(s1); to_lower(s2);
if(strcmp(s1 , s2) == 0)
return true;
return false;
}

int main()
{
char s[256], sep[]=".,;:-?! ";
while( fin.getline(s , 256) )
{
char * p = strtok(s , sep);
while(p)
{
if(verif(p))
{
bool gasit = false;
for(int i = 1 ; i <= n && ! gasit ; i++) if( egale(

Comentarii

S-ar putea sa iti placa