Informatică, întrebare adresată de anna015, 8 ani în urmă

Într-un text de cel mult 50 de caractere cuvintele sunt separate prin câte un spațiu și sunt 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.
Scrieti un program C/C++ care citeste de la tastatură un text de tipul precizat și construiește în memorie, apoi afișează pe ecran, numele instituției scris fără prescurtări.
Exemplu: dacă se citește textul COLEG. NATIONAL DE INFORMATICA sau textul
COLEG. NAT. DE INFORMATICA se obține COLEGIUL NATIONAL DE INFORMATICA

Am facut acest program, dar imi da eroare.
#include
#include
#include
using namespace std;
int main()
{char *p, a[4][9], s[51];
int ok;
a[1]='COLEGIUL';
a[2]='LICEUL';
a[3]='NATIONAL';
a[4]='TEORETIC';
cin.get(s,50);
p=strtok(s, " ");
while(p)
{
if(p[strlen(p)]=='.')
{
ok=1;
p[strlen(p)]==NULL;
for(int i=1; i<=4 && ok==1; i++)
if(strcmp(a[i],p))
{
cout< ok=0;
}
}
else cout<

p=strtok(NULL, " ");
}
return 0;
}
Ce gresesc?


boiustef: if(p[strlen(p)]=='.'
aici e eroarea, tr
if(p[strlen(p-1)]=='.'
boiustef: if(p[strlen(p)-1]=='.'

Răspunsuri la întrebare

Răspuns de boiustef
6

O altă abordare, nu cu mult diferită de a ta ...

#include <iostream>

#include <cstring>

using namespace std;

char cuv[4][15]={"COLEGIUL","LICEUL","NATIONAL","TEORETIC"},

      t[50], s[80], *p, sep[]=" ";

int poz, i, n, k;

int main()

{

   cin.getline(t,50);

   p=strtok(t,sep);

   while (p)

   {

       n=strlen(p);

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

       else

       {

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

           for (k=0; k<4; ++k)

           {

               if (strstr(cuv[k],p))

               {

                   strcat(s,cuv[k]);

                   break;

               }

           }

       }

       p=strtok(NULL, sep);

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

   }

     cout << s << "\n";

}


boiustef: variabila poz e în plus
Alte întrebări interesante