Informatică, întrebare adresată de claudianastasiu, 8 ani în urmă

Se dă un text format din mai multe cuvinte, semne de punctuație și caractere speciale care pot fi stocate folosind char. Să se interschimbe pentru fiecare cuvânt prima parte a sa cu ultima parte a sa. În cazul în care cuvântul are lungime impară, litera din mijloc rămâne pe poziția sa.

Un cuvânt este o succesiune de litere mari și mici ale alfabetului englez.

Date de intrare
Se va citi textul, care se poate afla pe mai multe linii.

Date de ieșire
Programul va afișa textul după aplicarea transformărilor cerute.

Restricții și precizări
Lungimea totală a textului este mai mică sau egală cu 2 000.

Date de intrare
test
Ana, dar si Maria invata sa programeze pe WellCode!!

Invata si tu sa programezi$$

Date de iesire:
stte
anA, rad is iarMa atainv as amezeprogr ep CodeWell!!
ataInv is ut as ameziprogr$$
Limbaj C++

Răspunsuri la întrebare

Răspuns de andrei750238
0

#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.

Alte întrebări interesante