Informatică, întrebare adresată de AnaFlorii, 9 ani în urmă

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 satelitii cate marcate Poate atent

Răspunsuri la întrebare

Răspuns de ap53
1
#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] << "\n";
return 0;
}
Alte întrebări interesante