Rezolvare completă PbInfo #1009 Cuvinte3

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

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 Adresa de email.

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!