Răspuns :
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
using namespace std;
void invarte_cuvant(char cuvant[1000]) {
//Retine dimenisunea
int dim = strlen(cuvant);
//Ia prima parte din cuvant
char prima[1000];
strncpy(prima, cuvant, dim / 2);
//ATENTIE : strncpy NU inchide sirul de caractere cu caracterul NULL, trebuie inchis manual
prima[dim / 2] = 0;
//Ia ultima parte din sir
char ultima[1000];
strcpy(ultima, cuvant + dim / 2);
//Daca e cuvant cu numar par de litere
if (dim % 2 == 0) {
strcpy(cuvant, ultima);
strcat(cuvant, prima);
}
//Daca e cuvant cu numar impar de litere
else {
//Ia mijlocul cuvantului
char mijloc = ultima[0];
//Pune ultima parte din cuvant (ultima[0] este mijloc, incepem de la ultima+1)
strcpy(cuvant, ultima + 1);
//Pune mijocul
cuvant[dim / 2] = mijloc;
//Am modificat manual ultimul caracter care era NULL, trebuie acum sa punem manual NULL pe pozitia urmatoare
cuvant[dim / 2 + 1] = 0;
//Punem prima parte din cuvant
strcat(cuvant, prima);
}
}
int main() {
//Citeste text intreg
char txt[2000];
cin.get(txt, 2000, 0); //Destinatie variabila txt, max 2000 char, se incheie cu caracter null
//Pentru fiecare pozitie
for (int poz = 0; poz < strlen(txt); poz++) {
//Declara cuvant si initializeaza cu sir gol
char cuvant[2000];
strcpy(cuvant, "");
//Cat timp caracterul curent e litera adauga in cuvant si treci la litera urmatoare
while (txt[poz] >= 'a' && txt[poz] <= 'z' || txt[poz] >= 'A' && txt[poz] <= 'Z') {
strncat(cuvant, txt + poz, 1);
poz++;
}
//Daca exista un cuvant, schimba prima parte cu ultima si afiseaza-l
if (strlen(cuvant) > 0) {
invarte_cuvant(cuvant);
cout << cuvant;
}
//Afiseaza caracterul curent
cout << txt[poz];
}
}
► Nota :
→ Iti sugerez sa rulezi pas cu pas programul pentru a intelege ce se intampla. Documentatia pentru functiile din cstring este utila pentru a intelege particularitatile acestora
► In C, un sir de caractere este un vector de caractere unde ultimul caracter este caracterul NULL (cod ASCII 0). Un vector este implementat folosind un pointer catre primul caracter din sir. Putem face aritmetica cu pointerii pentru a gasi sirurile care incep mai din dreapta.
daca txt = "ana are mere"; atunci
txt[0] → 'a'
txt[1] → 'n'
txt[12] → NULL
txt+1 = "na are mere"
txt+2 = "a are mere"
txt+3 = " are mere"
etc.
Vă mulțumim că ați vizitat platforma noastră dedicată Informatică. Sperăm că informațiile prezentate v-au fost utile. Dacă aveți întrebări sau aveți nevoie de suport suplimentar, vă rugăm să ne contactați. Vă așteptăm cu drag și data viitoare! Nu uitați să adăugați site-ul nostru la lista de favorite!