Informatică, întrebare adresată de Adeeeeeeeeeeee, 9 ani în urmă

Se citește de la tastatură un şir de cuvinte separate prin spații, şir care e
terminat cu caracterul EOF. Să se tipărească toate palindroamele care apar în
text. Un palindrom este un cuvânt care e identic citit de la început şi de la
sfârşit. Se cere să se afişeze palindroamele în ordine crescătoare. In limbajul C daca se poate:).


me2018: Sirul se termina cu caracterul EOF sau cu Enter?
me2018: asa s-ar putea folosi functia gets(s)
Adeeeeeeeeeeee: Cu EOF:)

Răspunsuri la întrebare

Răspuns de me2018
1

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int main()

{ char a[30][30],aux[30],s[30],x,*p;

  int n=0,i,j;

  int ind=scanf("%c",&x);

  while(ind!=EOF)

  {

    s[n++]=x;  ind=scanf("%c",&x);

  }

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

n=0;

  p=strtok(s," ");

  while(p)

  {

      strcpy(aux,p);

      strrev(aux);

      if(strcmp(aux,p)==0)

       strcpy(a[n++],p);

      p=strtok(NULL," ");

  }

  //am retinut palindroamele intr-o matrice pe linii diferite

  //le sortez

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

     for(j=i+1;j<n;j++)

     if(strcmp(a[i],a[j])>0)

           {

               strcpy(aux,a[i]);strcpy(a[i],a[j]);strcpy(a[j],aux);

           }

   //le afisez

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

               printf("%s ",a[i]);

   return 0;

}



me2018: verifica dimensiunea sirurilor
me2018: ca sa iti functioneze dupa ce introduci caracterele di sir paesi de 2 ori CTRL+Z(EOF)
me2018: apesi de 2 ori CTRL+Z(EOF)
Adeeeeeeeeeeee: Merge doar pentru un singur cuvant :( Daca introduc: ana elefaccafele paul, nu-mi afiseaza nimic, desi ar trebui sa apara ana elefaccafele, deoarece sunt palindroame.Ai idee cum pot remedia? multumesc mult pentru ajutor.
me2018: pune la strtok ca separator si virgula
me2018: in enunt erau doar spatii
Răspuns de sirDumitru
1

#include <ctype.h>


#include <stdlib.h>


#include <string.h>


#include <stdio.h>


#include <stdbool.h>



int main() {


   char str[100];  

   int i, j, temp,k=1;


   const char s[] = " \n";


   char *token;


   fgets(str, sizeof(str), stdin);


   token = strtok(str, s);


   while (token != NULL) {


   


       i = 0;


       j = strlen(token) - 1;


       bool palindrome = true;


       while (i < j) {


           if (tolower(token[i]) != tolower(token[j])) {


               palindrome = false;


               break;


           }


           i++;


           j--;


       }



       if (palindrome) {


           


           printf("\n%d) %s",k,token);


           k++;


       }



       token = strtok(NULL, s);


   }


   return 0;


}

Anexe:

sirDumitru: Testat. Introduci o propoziție și îți determină toate cuvintele palindrom din acea propoziție.
me2018: in ordine crescatoare???
me2018: si se termina cu EOF?
Adeeeeeeeeeeee: Pfu:))Multumesc si tie, dar mai usor de atat nu se poate rezolva?Sunt la inceput cu programarea si inca nu cunosc atatea functii
sirDumitru: Doar așa poți obține rezultatul dorit și fără erori. Șirurile string în C sunt destul de complicate, însă în program nu am folosit nimic ieșit din comun, totul este explicat pe net.
Adeeeeeeeeeeee: Am scris codul, dar daca scriu o propozitie nu imi afiseaza nimic, tot asa decat daca dau un singur cuvant imi afiseaza palindromul
sirDumitru: Am atașat un screen exemplu.
Adeeeeeeeeeeee: Oare in codeblocks de ce nu merge?:|
sirDumitru: Depinde ce eroare îți arată.
Alte întrebări interesante