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

Aliniere la dreapta

Cerință

Se dă un text format din litere ale alfabetului englez și steluțe ('*'), care se poate întinde pe mai multe linii. Aliniază textul la dreapta, astfel încât:
numărul de steluțe dintre 2 cuvinte consecutive de pe aceeași linie să fie păstrate
fiecare linie să se termine cu o literă
la începutul fiecărei linii să fie adăugat un număr suplimentar de steluțe (poate fi 0) astfel încât toate liniile să aibă aceeași dimensiune (același număr de caractere)
numărul de caractere de pe fiecare linie să fie egal cu numărul maxim de caractere de pe o linie din textul inițial

Date de intrare

Se va da un text format din caractere ale alfabetului englez și caractere '*', distribuite pe una sau mai multe linii.

Date de ieșire
Programul va afișa pe ecran textul formatat după criteriile prezentate mai sus.

Restricții și precizări

Fiecare linie va conține cel puțin un cuvânt (un grup de litere)
Fiecare linie va conține cel mult 1 000 caractere
1 ≤ numarul de linii din text ≤ 20

Exemplu

Date de intrare

Acesta*este
********un****text
***impartit*pe*mai
*multe*linii

Date de ieșire:

*******Acesta*este
********un****text
***impartit*pe*mai
*******multe*linii


Va rog in c++ , este urgent

Răspunsuri la întrebare

Răspuns de VxF
0

Răspuns:

#include <iostream>

#include <iomanip>

#include <cstring>

int main()

{

   char text[20][1000];

   int nrRand = 0, maxim = 0;

   while (std::cin >> text[nrRand]) {

       if (maxim < strlen(text[nrRand])) {

           maxim = strlen(text[nrRand]);

       }

       nrRand++;

   }

   // varianta 1: scriem în fața rândului stelutele una câte una

   for (int i = 0; i < nrRand; i++) {

       for (int j = strlen(text[i]); j < maxim; j++) {

           std::cout << "*";

       }

       std::cout << text[i] << std::endl;

   }

   // varianta 2: generăm un șir cu numărul necesar de steluțe și îl scriem în fața rândului

   for (int i = 0; i < nrRand; i++) {

       std::cout << std::string(maxim - strlen(text[i]), '*') << text[i] << std::endl;

   }

   // varianta 3: setăm aspectul de afișare a rândului (pentru asta am inclus iomanip)

   for (int i = 0; i < nrRand; i++) {

       std::cout << std::setw(maxim) << std::setfill('*') << text[i] << std::endl;

   }

}

Explicație:


oanaroxana3: Buna! Multumesc ptr raspuns. Am vazut ca ai scris un comentariu si la aceasta tema https://brainly.ro/tema/10349387, ma poti ajuta cu un raspuns , te rog . Raspunsul care este acolo este facut cu fisiere si nu ma ajuta . Textul trebuie citit de la tastatura si nu din fisier. Multumesc!
oanaroxana3: O intrebare , ce inseama " std::" nu am folosit pana acum.
oanaroxana3: Te rog mult crezi ca ai putea actualiza codul si sa nu mai folosesti "std::".
VxF: std este namespace-ul în care sunt declarate majoritatea claselor standard. Există 2 posibilități:
- Specifici de fiecare dată când folosești ceva din acel namespace
- Specifici la început de fișier „using namespace” însemnând că toate pentru care nu s-a specificat namespace să se considere că sunt de acolo
Alte întrebări interesante