halexandru11

problema 33

Nov 25th, 2020
68
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <fstream>
  3. #include <cstring>
  4.  
  5. using namespace std;
  6.  
  7. // verifica daca un cuvant este palindrom
  8. unsigned int este_palindrom(char cuv[]) {
  9.     unsigned int n = strlen(cuv);
  10.     for(int i = 0; i < n/2; ++i) {
  11.         // daca caracterele corespondente sunt diferinte inseamna ca
  12.         // cuvantul nu e palindrom
  13.         // **x*****y**
  14.         if(cuv[i] != cuv[n-1-i]) {
  15.             return 0;
  16.         }
  17.     }
  18.     // daca am ajuns aici inseamna ca toate caracterele se potrivesc
  19.     // deci cuvantul este palindrom
  20.     // xyz*zyx  sau xyzzyx
  21.     return 1;
  22. }
  23.  
  24. int main() {
  25.     ifstream fin("date.in");
  26.     ofstream fout("date.out");
  27.  
  28.     char sep[8] = ":;,. !?";
  29.     char text[301];
  30.     fin.get(text, 300);
  31.  
  32.     cout << "Sirul initial este:\n";
  33.     cout << text << "\n\n";
  34.     // cout << "\n\n"; poate fi scris si cout << endl << endl;
  35.  
  36.     // pun fiecare cuvant din text pe o linie din matricea cuv
  37.     char cuv[301][301];
  38.     char* p = strtok(text, sep);
  39.     unsigned int n = 0;
  40.     while(p) {
  41.         strcpy(cuv[n], p);
  42.         ++n;
  43.         p = strtok(NULL, sep);
  44.     }
  45.  
  46.     // palindrom contine cel mai lung palindrom
  47.     char palindrom[301] = "";
  48.     for(int i = 0; i < n; ++i) {
  49.         // daca dimensiunea cuvantului curent este mai mica decat a palindromului
  50.         // cuvantul curent sigur nu este un candidat bun
  51.         if(strlen(cuv[i]) > strlen(palindrom)) {
  52.             // daca cuvantul curent este palindrom actualizam variabila palindrom
  53.             // stim sigur ca este mai lung din if-ul anterior
  54.             if(este_palindrom(cuv[i])) {
  55.                 strcpy(palindrom, cuv[i]);
  56.             }
  57.         }
  58.     }
  59.  
  60.     cout <<  "Cel mai lung cuvant palindrom este: " << palindrom << "\n\n";
  61.  
  62.  
  63.     // ordonez crescator cuvintele dupa lungime
  64.     for(int i = 0; i < n-1; ++i) {
  65.         for(int j = i+1; j < n; ++j) {
  66.             if(strlen(cuv[i]) > strlen(cuv[j])) {
  67.                 // copiez sirurile de carectere cu functia de copiere a sirurilor de caractere
  68.                 char aux[300];
  69.                 strcpy(aux, cuv[i]);
  70.                 strcpy(cuv[i], cuv[j]);
  71.                 strcpy(cuv[j], aux);
  72.             }
  73.         }
  74.     }
  75.     cout << "Cuvintele in ordine crescatoare a lungimii:\n";
  76.     for(int i = 0; i < n; ++i) {
  77.         cout << cuv[i] << "\n";
  78.     }
  79. }
  80.  
RAW Paste Data Copied