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.
Exemple
Date de intrare Date de ieșire
test --> stte
Ana, dar si Maria invata sa programeze pe WellCode!! -- >anA, rad is iarMa atainv as amezeprogr ep CodeWell!!
Invata si tu sa programezi$$--> ataInv is ut as ameziprogr$$
Acesta este codul meu :
#include
#include
using namespace std;
int main() {
char s[101];
cin.getline(s, 101);
int n = strlen(s);
for(int i = 0; 2 * i <= n - 1; i++) {
char aux = s[i];
s[i] = s[n - i - 1];
s[n - i - 1] = aux;
}
cout << s;
return 0;
}
ideea este ca imi inverseaza si cuvintele intre ele , exemplu : radu canta -->afiseaza: atnac udar, in loc de -->udar atnac.
Cum sa fac sa nu imi mai inverseze si cuvintele?
Multumesc!
Răspunsuri la întrebare
Răspuns:
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char s[2001], cuvant[2001];
int inceput = -1;
cin.getline(s, 2001, 0);
int n = strlen(s);
for (int i = 0; i < n; ++i) {
if ((s[i] >= 'a' && s[i] <= 'z') || (s[i] >= 'A' && s[i] <= 'Z')) {
if (inceput == -1) {
inceput = i;
}
} else if (inceput != -1) {
strncpy(cuvant, s + inceput, i - inceput);
strncpy(s + inceput, cuvant + (i - inceput + 1) / 2, (i - inceput) / 2);
strncpy(s + inceput + (i - inceput + 1) / 2, cuvant, (i - inceput) / 2);
inceput = -1;
}
}
if (inceput != -1) {
strncpy(cuvant, s + inceput, n - inceput);
strncpy(s + inceput, cuvant + (n - inceput + 1) / 2, (n - inceput) / 2);
strncpy(s + inceput + (n - inceput + 1) / 2, cuvant, (n - inceput) / 2);
}
cout << s;
return 0;
}
Explicație:
Cum am propus, am adaptat rezolvarea de la https://brainly.ro/tema/10330113
strncpy(s + inceput, cuvant + (n - inceput + 1) / 2, (n - inceput) / 2);
strncpy(s + inceput + (n - inceput + 1) / 2, cuvant, (n - inceput) / 2);?
strcpy(cuvant, s + inceput);
for (int j = 0; j < (i - inceput) / 2; j++) {
s[inceput + j] = cuvant[(i - inceput + 1) / 2 + j];
s[inceput + (i - inceput + 1) / 2 + j] = cuvant[j];
}
for (int j = 0; j < (i - inceput) / 2; j++) {
s[inceput + j] = cuvant[(i - inceput + 1) / 2 + j];
s[inceput + (i - inceput + 1) / 2 + j] = cuvant[j];
} doar ca nu functioneaza corect