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

A doua linie
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 ieșire
ea crede ca programarea nu e grea

Ma puteti ajuta va rog, cu o rezolvare in c++ sa utilizeze, string-uri iar textul sa fie citit de la tastatura, va rog fara fisiere. Multumesc!

Răspunsuri la întrebare

Răspuns de VxF
1

Răspuns:

#include <iostream>

#include <cstring>

int main()

{

   std::string text;

   std::getline(std::cin, text, '\0');

   std::size_t inceput = text.find('\n');

   if (inceput == std::string::npos) {

       std::cout << "Cam scurt" << std::endl;

       return 0;

   }

   std::size_t sfarsit = text.find('\n', inceput + 1);

   if (sfarsit == std::string::npos) {

       sfarsit = text.length();

   }

   std::cout << "Rândul 2: " << text.substr(inceput + 1, sfarsit - inceput - 1) << std::endl;

}

Explicație:

Am ales o abordare puţin diferită față de rezolvarea ce ai primit ieri: citesc tot folosind un singur apel de getline(), apoi caut primele 2 caractere \n și returnez ce-i între ele.

Ironia sorţii că fix acum ai trecut la string. În char[] se putea face getline() la doar 2 * 100 caractere să nu mai citești tot inputul dacă după al 2-lea rând nu te mai interesează.


oanaroxana3: Îți mulțumesc, dar crezi ca ai modifica răspunsul și sa nu mai utilizezi std:: sa îl folosești doar ca biblioteca... Ce este npos?
VxF: Am întârziat. Răspunsul nu mai poate fi editat. Dar asta ar fi:
#include "iostream"
#include "cstring"

using namespace std;

int main()
{
   string text;

   getline(cin, text, '\0');

   size_t inceput = text.find('\n');
   if (inceput == string::npos) {
       cout << "Cam scurt" << endl;
       return 0;
   }

   size_t sfarsit = text.find('\n', inceput + 1);
   if (sfarsit == string::npos) {
       sfarsit = text.length();
   }

   cout << "Rândul 2: " << text.substr(inceput + 1, sfarsit - inceput - 1) << endl;
}
VxF: string::npos este o proprietate const cu valoarea -1. Adică valoarea specială returnată de find() când nu găsește ce i s-a cerut. Folosit pentru a face verificarea succesului find() mai prietenos pentru cititor.
oanaroxana3: Buna! uite si o varinata mai simpla :
oanaroxana3: #include
#include
using namespace std;

int main(){
string txt;
int nr_line = 0;
while (getline(cin, txt)) {
++nr_line;
if (nr_line == 2) {
cout << txt;
}
}
if (nr_line < 2) {
cout <<"text prea scurt";
}
return 0;
}
VxF: Da, e mai simplă. Dar cum ai pus accent pe „sa utilizeze, string-uri”, am ales o abordare care folosește totuși niște metode a stringului.
Alte întrebări interesante