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

Fiind dat un text aflat pe mai multe linii, să se afișeze a doua linie din text.

În cazul în care textul nu conține minim 2 linii se va afișa text prea scurt.

Date de intrare
Un text aflat pe mai multe linii.

Date de ieșire
Pe ecran se va afișa a doua linie din text.

Restricții
Textul va conține maxim 20 de linii, iar fiecare linie conține maxim 100 caractere.

Atunci când textul conține minim 2 linii, fiecare linie va conține minim 1 caracter diferit de spațiu.

Exemplu
Date de intrare
ana invata sa programeze
ea crede ca programarea nu e grea
daca rezolvi suficiente probleme
si esti harnic

Date de iesire
ea crede ca programarea nu e grea

Limbaj C++, va rog atentie la restrictii si precizari, trebuie sa fie valabile pe toate cazurile, multumesc mult!

Răspunsuri la întrebare

Răspuns de Apollyon
1

Răspuns:

#include <iostream>

#include <string>

#include <vector>

bool

existaCaracterDiferitDeSpatiu(const std::string& linie);

bool

verificaLinii(const std::vector<std::string>& vectorLinii);

int

main()

{

 std::vector<std::string> vectorLiniiText;

 std::string liniaCitita;

 vectorLiniiText.reserve(20);

 while (true) {

   std::cout << "Introdu linia >> ";

   std::getline(std::cin, liniaCitita);

   /* am pus eu condiția asta ca să ies din while (tu o să citești până nu mai primești input / nu mai ai linii în fișier etc...) */

   if (liniaCitita.empty()) break;

   /* ăsta ar fi cazul în care linia are mai mult de 100 de caractere */

   if (liniaCitita.length() > 100) exit(EXIT_FAILURE);

   vectorLiniiText.push_back(liniaCitita);

   /* ăsta ar fi cazul în care citim mai mult de 20 de linii */

   if (vectorLiniiText.size() > 20) exit(EXIT_FAILURE);

 }

/* dacă avem mai puțin de 2 linii afișăm "Text prea scurt" */

 if (vectorLiniiText.size() < 2) {

   std::cout << "Text prea scurt\n";

 }

/* dacă avem minim 2 linii */

 if (vectorLiniiText.size() >= 2) {

   /* și toate liniile conțin măcar un caracter diferit de spațiu */

   if (verificaLinii(vectorLiniiText)) {

     /* afișăm a doua linie din vector */

     std::cout << vectorLiniiText.at(1) << "\n";

   }

 }

 return 0;

}

bool

verificaLinii(const std::vector<std::string>& vectorLinii)

{

 /* presupunem că toate liniile conțin minim un caracter diferi de spațiu */

 bool conditieAdevar{ true };

 for (const std::string& linieCurenta : vectorLinii) {

   /* dacă găsim o linie ce nu respectă condiția ieșim din for și returnăm false */

   if (!existaCaracterDiferitDeSpatiu(linieCurenta)) {

     conditieAdevar = false;

     break;

   }

 }

 return conditieAdevar;

}

bool

existaCaracterDiferitDeSpatiu(const std::string& linie)

{

/* by default presupunem că nu există niciun caracter diferit de spațiu */

 bool conditieAdevar{ false };

 for (const char& caracterCurent : linie) {

   if (caracterCurent != ' ') {

     /* dacă am găsit cel puțin un caracter diferit de spațiu setăm condiția la true și dăm break pentru că nu mai are rost să căutăm altele */

     conditieAdevar = true;

     break;

   }

 }

 return conditieAdevar;

}


Dacă nu îți iasă ceva, mai trebuie modifiat/adăugat lasă un comentariu și rezolvăm.


claudianastasiu: Salut, multumesc mult pentru atentie, insa pe platforma unde le pun primesc 25 de puncte si 3 teste cu non-zero exit status : 1, nu stiu exact ce inseamna, crezi ca il poti face o idee mai simplu? Daca e posibil. Utilizand mai multe operatiuni de baza. Multumesc mult de intelegere, apreciez!
claudianastasiu: Probabil e din cauza faptului ca, daca il rulezi in codeblocks spre exemplu, dupa ce introduci liniile mai trebuie sa apesi o data enter intr-un spatiu gol ca sa iti afiseze raspunsul.
Apollyon: Am lăsat acolo un comentariu că trebuie să modifici când se oprește practic acel while ( eu l-am pus să se oprească când îi dau un ENTER pentru testare )
Apollyon: acuma depinde și cazurile acelea cum trebuie tratate, eu am dat să iasă din aplicație de exemplu, pot fi modificate corespunzător
Apollyon: cred că poți face ceva de genul while ( cin.getline(…) ), practic să continui cu while atâta timp cât primesti input
Alte întrebări interesante