Î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?
Răspunsuri la întrebare
Răspuns de
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";
}
Alte întrebări interesante
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Engleza,
9 ani în urmă
Limba română,
9 ani în urmă
aici e eroarea, tr
if(p[strlen(p-1)]=='.'