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

Am nevoie de ajutor la o problema unde algoritmul meu primeste doar 80 de puncte.
Cerința
Se dă o propoziție formată din litere mici ale alfabetului englez, spații și semnele de punctuație ,.. Determinați un cuvânt palindrom din propoziție, primul în ordine alfabetică.

Date de intrare
Programul citește de la tastatură propoziția dată.

Date de ieșire
Programul va afișa pe ecran cuvântul determinat, sau mesajul IMPOSIBIL, dacă în șir nu există niciun cuvânt palindrom.

Restricții și precizări
propoziția citită va conține cel mult 255 de caractere
cuvintele din propoziție vor avea maxim 10 litere

Exemplu
Intrare

ele deschid un capac, aerisirea este ok
Ieșire

aerisirea
Cerința
Se dă o propoziție formată din litere mici ale alfabetului englez, spații și semnele de punctuație ,.. Determinați un cuvânt palindrom din propoziție, primul în ordine alfabetică.

Date de intrare
Programul citește de la tastatură propoziția dată.

Date de ieșire
Programul va afișa pe ecran cuvântul determinat, sau mesajul IMPOSIBIL, dacă în șir nu există niciun cuvânt palindrom.

Restricții și precizări
propoziția citită va conține cel mult 255 de caractere
cuvintele din propoziție vor avea maxim 10 litere

Exemplu
Intrare

ele deschid un capac, aerisirea este ok
Ieșire

aerisirea
Cerința
Se dă o propoziție formată din litere mici ale alfabetului englez, spații și semnele de punctuație ,.. Determinați un cuvânt palindrom din propoziție, primul în ordine alfabetică.

Date de intrare
Programul citește de la tastatură propoziția dată.

Date de ieșire
Programul va afișa pe ecran cuvântul determinat, sau mesajul IMPOSIBIL, dacă în șir nu există niciun cuvânt palindrom.

Restricții și precizări
propoziția citită va conține cel mult 255 de caractere
cuvintele din propoziție vor avea maxim 10 litere

Exemplu
Intrare

ele deschid un capac, aerisirea este ok
Ieșire

aerisirea
#include
#include
using namespace std;
char s[256],*p,p1[11],p2[11],t[11],p3[11];
int main()
{
long long int i,k=0,f=0,q=0,j;
cin.getline(s,256);
p=strtok(s," ., ");
strcpy(t,s);
while(p)
{
k=0;
strcpy(p1,p);
for(j=strlen(p)-1;j>=0;j--)
{
p2[k]=p[j];
k++;
}
p2[k]=0;
if(strcmp(p2,p1)==0)
{
if(strcmp(p2,t)<=0)
{strcpy(t,p2);}

f++;
}
p=strtok(NULL," ., ");

}
if(f>0)
{
for(i=strlen(t)-1;i>=0;i--)
{
p3[q]=t[i];
q++;}
cout << p3;



}
else
cout << "IMPOSIBIL";

}

Ce ar trebui sa modific la el?


boiustef: e de pe pbinfo?
togoeradu: da

Răspunsuri la întrebare

Răspuns de boiustef
10

Răspuns:

#include <iostream>

#include <string.h>

using namespace std;

char s[256], separator[]=" ,.", copie[12], pal[12], *cuv;

short gasit, p, i;

int main()

{

   cin.getline(s,256);

   cuv=strtok(s, separator);

   gasit=0;

   while (cuv)

   {

       p=strlen(cuv);

       for(i=0; i<p; ++i )

           copie[i]=cuv[p-1-i]; copie[p]=0;

       if (strcmp(cuv,copie)==0)

       {

           gasit=1;

           if (strlen(pal)==0) strcpy(pal,cuv);

           if (strcmp(cuv, pal)<0)

               strcpy(pal,cuv);

       }

       cuv=strtok(NULL, separator);

   }

   if (gasit) cout << pal;

   else cout << "IMPOSIBIL";

}

Explicație:

succese la cercetare...  

Alte întrebări interesante