fork download
  1. #include <iostream>
  2. #include <cstring>
  3.  
  4. // Functie pentru a verifica daca un caracter este litera
  5. bool esteLitera(char c) {
  6. return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z');
  7. }
  8.  
  9. // Functie pentru a numara caracterele alfabetice dintr-un cuvant
  10. int nrChar(const char* cuvant) {
  11. int count = 0;
  12. for (int i = 0; cuvant[i] != '\0'; i++) {
  13. if (esteLitera(cuvant[i])) {
  14. count++;
  15. }
  16. }
  17. return count;
  18. }
  19.  
  20. // Functie pentru a inversa prima jumatate cu a doua jumatate a unui cuvant
  21. void preschimbaCuvant(char* cuvant) {
  22. int lungime = strlen(cuvant);
  23. int litere = nrChar(cuvant);
  24.  
  25. if (litere < 2) return; // Daca sunt mai putin de 2 litere, nu facem nimic
  26.  
  27. int mijloc = litere / 2;
  28. bool areImpar = (litere % 2 != 0);
  29. int literaCurenta = 0; // Numara doar literele alfabetice
  30.  
  31. // Interschimbam prima si a doua jumatate a cuvantului
  32. for (int i = 0, j = lungime - 1; i < j;) {
  33. // Gasim prima litera din prima jumatate
  34. if (!esteLitera(cuvant[i])) {
  35. i++;
  36. continue;
  37. }
  38. // Gasim prima litera din a doua jumatate
  39. if (!esteLitera(cuvant[j])) {
  40. j--;
  41. continue;
  42. }
  43. if (literaCurenta < mijloc) {
  44. // Schimbam literele dintre cele doua jumatati
  45. std::swap(cuvant[i], cuvant[j]);
  46. }
  47. literaCurenta++;
  48. i++;
  49. j--;
  50.  
  51. // Oprim cand am inversat jumatatile si caracterul din mijloc este neatins
  52. if (areImpar && literaCurenta == mijloc) {
  53. break;
  54. }
  55. }
  56. }
  57.  
  58. int main() {
  59. // Propozitie pe mai multe randuri
  60. char text[] = "Aceasta este o propozitie\nMai complexa si ciudata!";
  61.  
  62. // Cream un buffer pentru a lucra cu fiecare cuvant
  63. char* cuvant = strtok(text, " \n");
  64.  
  65. // Parcurgem fiecare cuvant si aplicam functia de preschimbare
  66. while (cuvant != nullptr) {
  67. preschimbaCuvant(cuvant); // Apelam functia pentru a preschimba cuvantul
  68. cuvant = strtok(nullptr, " \n");
  69. }
  70.  
  71. // Afisam propozitia rezultata
  72. std::cout << "Propozitia cu cuvintele preschimbate este:\n" << text << std::endl;
  73.  
  74. return 0;
  75. }
  76.  
Success #stdin #stdout 0.01s 5284KB
stdin
Am fost plecat la mare
stdout
Propozitia cu cuvintele preschimbate este:
atsaecA