👤

Scrieți funcția cu următorul antet:


void Prescurtat(char s[ ])


Funcția primește ca parametru un text de cel mult 50 de caractere, alcătuit din cuvinte separate prin câte un spațiu și formate din litere mari ale alfabetului englez, urmate eventual de caracterul . (punct), dacă sunt scrise prescurtat. Textul reprezintă numele unei instituții de învățământ și doar cuvintele din mulțimea {COLEGIUL, LICEUL, NATIONAL, TEORETIC} pot fi prescurtate, eliminându-se ultimele lor litere. Funcția va returna tot prin intermediul parametrului s numele instituției scris fără prescurtări.





Exemplu

Dacă s memorează inițial COLEG. NAT. DE INFORMATICA, atunci după apelul Prescurtat(s), șirul va deveni COLEGIUL NATIONAL DE INFORMATICA.


Restricții și precizări

Lungimea inițială a șirului s va fi de cel mult 50, iar la final de cel mult 100.

Puteți utiliza funcțiile pentru șirurile de caractere din biblioteca cstring


Acesta este codul meu, pe exemplu si pe altele create de mine imi da bine, pe site-ul pbinfo imi da tot gresit, doresc sa-mi spuneti daca stiti care este motivul. Multumesc!


Problema se numeste "prescurtat".

Codul meu => https://pastebin.com/TGwaS0Dv



Răspuns :

void Prescurtat(char s[])

{

   char w[100], *p, sep[]=" ", c1[]="COLEGIUL", c2[]="LICEUL", c3[]="NATIONAL", c4[]="TEORETIC";

   int n;

     p=strtok(s,sep); w[0]='\0';

   while (p)

   {

       n=strlen(p);

       if (p[n-1]!='.') strcat(w,p);

       else

       {

           p[n-1]='\0';

           if (strstr(c1,p)) strcat(w,c1);

           if (strstr(c2,p)) strcat(w,c2);

           if (strstr(c3,p)) strcat(w,c3);

           if (strstr(c4,p)) strcat(w,c4);

       }

       p=strtok(NULL, sep);

       if (p) strcat(w, " ");

   }

   strcpy(s,w);

}