Probleme de informatică
Clasa a IX-a
Elementele de bază C++ (46)
Subprograme predefinite (1)
Fişiere text (2)
Algoritmi elementari (109)
Tablouri unidimensionale (83)
Tablouri bidimensionale (64)
Probleme diverse (13)
Clasa a X-a
Subprograme (funcții) (87)
Şiruri de caractere (49)
Tipul înregistrare (26)
Recursivitate (57)
Alocarea dinamică a memoriei (2)
Liste înlănţuite (25)
Algoritmul lui Lee (1)
Clasa a XI-a
Metoda "Divide et impera" (12)
Metoda Backtracking (85)
Metoda Greedy (6)
Programare dinamică (18)
Grafuri neorientate (37)
Grafuri orientate (38)
Arbori (33)
Clasa a XII-a
Elemente de bază C# (32)
POO în C# (13)
Programare vizuală în C# (11)
Examen de bacalaureat
Competențe digitale
Examen de atestat
Admitere UBB (18)
Din fisierul text date.in se citeste un text format din cuvinte separate prin spatii sau caractere de forma .,;:-?!. Lungimea unei linii din fisier nu depaseste 255 caractere. Sa se scrie in fisierul text date.out, pe linii diferite, cuvintele distincte din text care contin subsirul "ate", fara a face distinctie intre litere mari si mici.
Exemplu:
date.in
Daca satelitii nu sunt activi, GPS-ul nu functioneaza...
- Ai vazut cate cuvinte marcate sunt?? Poate esti si tu atent! Cate sunt?
date.out
satelitii
cate
marcate
Poate
atent

#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("date.in");
ofstream fout("date.out");

int gasit(int n, char s[100][256], char c[256])
{
    for(int i=1;i<=n;i++)
        if(strcmpi(s[i],c)==0) return 1;
    return 0;
}

int litera(char c)
{
    return c>='a' && c<='z' || c>='A' && c<='Z';
}

int main()
{
    char s[100][256];//memoreaza cuvintele distincte
    char a[266];//citeste o linie din fisier
    int n=0;//nr de cuvinte distincte
    while(fin.getline(a,256))//cat timp pot citi un rand
    {
        char *p;
        while(p=strstr(a,"ate"))//p indica unde il gaseste pe ate
        {
            int j=p-a;//pozitia unde e ate
            while(j>0 && litera(a[j-1])) j--;//merg spre stanga in cuvant
            int k=p-a; //pozitia unde e ate
            while(k<strlen(a) && litera(a[k+1])) k++;//merg spre dreapta  in cuvant
            char cuv[256]="";
            strncat(cuv,a+j,k-j+1);//copiez cuvantul in cuv
            if(!gasit(n,s,cuv))//daca nu exista in cuvintele memorate in s
                strcpy(s[++n],cuv);//il daug
            strcpy(a+j,a+k+1);//il sterg din linia citita
        }
    }
    for(int i=1;i<=n;i++)
        fout<<s[i]<<endl;
    fin.close();
    fout.close();
    return 0;
}

19 nov 2018
Site-ul conține 868 de probleme rezolvate
Copyright © 2009-2018 Muresan Vasile Ciprian