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șirulate
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
satelitii cate marcate Poate atent
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema Cuvinte3:
#include <fstream>
#include <iostream>
#include <cstring>
#include <cctype>
using namespace std;
ifstream fin("cuvinte3.in");
ofstream fout("cuvinte3.out");
int n;
char lista[505][256];
void to_lower(char * p)
{
for(int i = 0 ; p[i] ; i++)
p[i] = tolower(p[i]);
}
bool OK(char * p)
{
char t[256];
strcpy(t , p);
to_lower(t);
if( strstr(t , "ate") )
return true;
return false;
}
bool egale(char * s , char * t)
{
char ss[256], tt[256];
strcpy(ss , s);
strcpy(tt , t);
to_lower(ss); to_lower(tt);
if(strcmp(ss , tt) == 0)
return true;
return false;
}
int main()
{
char linie[256], sep[]=".,;:-?! ";
while( fin.getline(linie , 256) )
{
char * p = strtok(linie , sep);
while(p)
{
if(OK(p))
{
bool gasit = false;
for(int i = 1 ; i <= n && ! gasit ; i++)
if( egale(p , lista[i]) )
gasit = true;
if(! gasit)
{
n ++;
strcpy(lista[n] , p);
}
}
p = strtok( NULL , sep);
}
}
for(int i = 1 ; i <= n ; i ++)
fout << lista[i] << "
";
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #1009 Cuvinte3
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1009 Cuvinte3 de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!