#include <iostream>
#include <cstring>

// Functie pentru a verifica daca un caracter este litera
bool esteLitera(char c) {
    return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z');
}

// Functie pentru a numara caracterele alfabetice dintr-un cuvant
int nrChar(const char* cuvant) {
    int count = 0;
    for (int i = 0; cuvant[i] != '\0'; i++) {
        if (esteLitera(cuvant[i])) {
            count++;
        }
    }
    return count;
}

// Functie pentru a inversa prima jumatate cu a doua jumatate a unui cuvant
void preschimbaCuvant(char* cuvant) {
    int lungime = strlen(cuvant);
    int litere = nrChar(cuvant);

    if (litere < 2) return;  // Daca sunt mai putin de 2 litere, nu facem nimic

    int mijloc = litere / 2;
    bool areImpar = (litere % 2 != 0);
    int literaCurenta = 0; // Numara doar literele alfabetice

    // Interschimbam prima si a doua jumatate a cuvantului
    for (int i = 0, j = lungime - 1; i < j;) {
        // Gasim prima litera din prima jumatate
        if (!esteLitera(cuvant[i])) {
            i++;
            continue;
        }
        // Gasim prima litera din a doua jumatate
        if (!esteLitera(cuvant[j])) {
            j--;
            continue;
        }
        if (literaCurenta < mijloc) {
            // Schimbam literele dintre cele doua jumatati
            std::swap(cuvant[i], cuvant[j]);
        }
        literaCurenta++;
        i++;
        j--;
        
        // Oprim cand am inversat jumatatile si caracterul din mijloc este neatins
        if (areImpar && literaCurenta == mijloc) {
            break;
        }
    }
}

int main() {
    // Propozitie pe mai multe randuri
    char text[] = "Aceasta este o propozitie\nMai complexa si ciudata!";
    
    // Cream un buffer pentru a lucra cu fiecare cuvant
    char* cuvant = strtok(text, " \n");

    // Parcurgem fiecare cuvant si aplicam functia de preschimbare
    while (cuvant != nullptr) {
        preschimbaCuvant(cuvant);  // Apelam functia pentru a preschimba cuvantul
        cuvant = strtok(nullptr, " \n");
    }

    // Afisam propozitia rezultata
    std::cout << "Propozitia cu cuvintele preschimbate este:\n" << text << std::endl;

    return 0;
}
