Advertisement
Guest User

Untitled

a guest
May 10th, 2019
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.88 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <cstring>
  4.  
  5. using namespace std;
  6.  
  7. /*
  8.     1. Sa se citeasca o propozitie de la tastatura. Sa se afiseze lungimea fiecarui cuvant.
  9. */
  10.  
  11. void metodaGrea(char text[1024]) {
  12.     int startCuv, endCuv;
  13.     for (int i = 0; i < strlen(text); i++) {
  14.         if (strchr(" .,", text[i]) == NULL) {
  15.             startCuv = i;
  16.             for (int j = i + 1; j < strlen(text); j++) {
  17.                 if (strchr(" .,", text[j]) != NULL) {
  18.                     endCuv = j;
  19.                     cout << endCuv - startCuv << " ";
  20.                     i = endCuv - 1;
  21.                     break;
  22.                 }
  23.                 if (j == strlen(text) - 1) {
  24.                     endCuv = j + 1;
  25.                     cout << endCuv - startCuv << " ";
  26.                     i = endCuv;
  27.                 }
  28.             }
  29.         }
  30.     }
  31. }
  32.  
  33. // de evidentiat ca in metoda simpla nu trebuie sa ne preocupam
  34. // cum este cuvantul in intreg textul si nu trebuie sa stim unde
  35. // incepe sau unde se termina
  36. void metodaUsoara(char text[1024]) {
  37.     char *cuv = NULL; // de explicat putin pointerul
  38.     cuv = strtok(text, " ,.");
  39.     while (cuv != NULL) {
  40.         cout << strlen(cuv) << " ";
  41.         cuv = strtok(NULL, " ,.");
  42.     }
  43. }
  44.  
  45. /*
  46.     2. Sa se citeasca un text dintr-un fisier. Sa se transforme in fiecare cuvant de pe pozitie para
  47.     literele de pe pozitii pare in litere mari. Asemanator pentru cuvinte de pe pozitii impare.
  48.     salut, sunt un text -> SaLuT, sUnt Un tExT
  49. */
  50. void resizeLetters(char text[1024]) {
  51.     char *cuv = NULL; // de explicat putin pointerul
  52.     char oldText[1024];
  53.     strcpy(oldText, text);
  54.     cuv = strtok(text, " ,.");
  55.     int wordCount = 1;
  56.     while (cuv != NULL) {
  57.         if (wordCount % 2 == 0) {
  58.             for (int i = 0; i < strlen(cuv); i++) {
  59.                 if (i % 2 == 1) {
  60.                     cuv[i] -= 'a' - 'A';
  61.                 }
  62.             }
  63.         }
  64.         else {
  65.             for (int i = 0; i < strlen(cuv); i++) {
  66.                 if (i % 2 == 0) {
  67.                     cuv[i] -= 'a' - 'A';
  68.                 }
  69.             }
  70.         }
  71.         cuv = strtok(NULL, " ,.");
  72.         wordCount++;
  73.     }
  74.     // la inceput fara asta pentru a arata ca strtok pune \0 peste tot
  75.     // acolo unde e litera neimportanta
  76.     for (int i = 0; i < strlen(oldText); i++) {
  77.         if (text[i] == '\0') {
  78.             text[i] = oldText[i];
  79.         }
  80.     }
  81. }
  82.  
  83. /*
  84.     3. Sa se citeasca un text de la tastatura. Sa se elimine din fiecare cuvant litere daca au peste
  85.     5 litere. Se vor elimina atatea cate trebuie pentru a ajunge la 5. Textele vor incepe cu o litera
  86.     si vor avea la final un punct.
  87.     propozitia aceasta are cuvinte lungi -> proia aceta are cuvte lungi
  88. */
  89. void removeLetters(char text[1024]) {
  90.     char words[100][256];
  91.     char *cuv = NULL;
  92.     char textCopy[1024];
  93.     strcpy(textCopy, text); // salvam o copie deoarece stricam text
  94.     cuv = strtok(text, " ,.");
  95.     int wordIndex = 0;
  96.     while (cuv != NULL) {
  97.         while (strlen(cuv) > 5) {
  98.             for (int i = strlen(cuv) / 2; i < strlen(cuv); i++) {
  99.                 cuv[i] = cuv[i + 1];
  100.             }
  101.         }
  102.         strcpy(words[wordIndex], cuv);
  103.         cuv = strtok(NULL, " ,.");
  104.         wordIndex++;
  105.     } // daca mergem doar prin cuvinte, pierdem spatiile si semnele de punctuatie
  106.     // nu putem face ca la ultima problema deoarece am pus \0 in plus cum am ster litere
  107.     // asa ca ne salvam toate spatiile dintre cuvinte si semnele de punctuatie
  108.     char seps[100][256];
  109.     cuv = strtok(textCopy, "qwertyuiopasdfghjklzxcvbnm"); // lasam doar litere mici (citim doar litere mici)
  110.     int sepIndex = 0;
  111.     while (cuv != NULL) {
  112.         strcpy(seps[sepIndex], cuv);
  113.         cuv = strtok(NULL, "qwertyuiopasdfghjklzxcvbnm");
  114.         sepIndex++;
  115.     }
  116.     char newText[1024];
  117.     strcpy(newText, ""); // ne construim noul sir gol unde o sa punem rezultatul
  118.     for (int i = 0; i < wordIndex; i++) {
  119.         strcat(newText, words[i]);
  120.         if (i < sepIndex)
  121.         {
  122.             strcat(newText, seps[i]);
  123.         }
  124.     }
  125.     strcpy(text, newText);
  126. }
  127.  
  128. int main() {
  129.     /* main 1
  130.     char text[1024];
  131.     cin.getline(text, 1024);
  132.     metodaGrea(text);
  133.     cout << endl;
  134.     metodaUsoara(text);
  135.     */
  136.     /* main 2
  137.     char text[1024];
  138.     ifstream fin("text.in");
  139.     fin.getline(text, 1024);
  140.     resizeLetters(text);
  141.     cout << text;
  142.     */
  143.     char text[1024];
  144.     cin.getline(text, 1024);
  145.     removeLetters(text);
  146.     cout << text;
  147.  
  148.     system("pause");
  149.     return 0;
  150. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement