Wyświetlanie nieparzystych wierszy C++


(Jtomek1) #1

Witam!


(mikolaj_s) #2

Utwórz zmienną typu int przed pętlą, a środku zwiększaj o 1. Drukuj gdy liczba jest podzielna przez 2.


(matty24) #3

Zrób pętlę (np. for), w której będziesz wczytywać co drugi wiersz. Albo też licznik w while który się zwiększa i jeśli będzie on parzysty/nieparzysty to wypisze linię, np.

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
 
using namespace std;
 
int main()
{
    string linia;
    fstream plik;
    int licznik=0;
    plik.open("D:\wizytowka.txt", ios::in);

    if(plik.good() == true)
    {
        while(!plik.eof())
        {
			licznik++; //licznik startuje od 1 jak wiersze w tekscie i zwiększa się o 1 w każdej iteracji
			if((licznik % 2)==1) //jeżeli licznik jest nieparzysty (wiersz nieparzysty)
			{
				getline(plik, linia); //wczytuje linię do bufora
				cout << linia << endl; //wyświetla linię 
			}
			else //jeżeli licznik jest parzysty (wiersz parzysty)
			{
				getline(plik, linia); //wczytuje linię do bufora ale nie wyświetla
			}
        }
        plik.close();
    }
 
    system("PAUSE");
    return(0);
}

(nintyfan) #4

Reup: getline można umieścić przez blokiem if, zamiast w środku bloku if i bloku else.


(Jtomek1) #5

Okej zrobiłem to tak:


(matty24) #6

Jeżeli wszystkie są różnej długości a chcesz wybrać najdłuższy to

  • tworzysz zmienną int np. licz = 0 i string np. naj

  • porównujesz za każdym odczytem lini czy linia.length() jest większe od licz i jeśli tak to do naj wpisujesz linię a do licz wpisujesz linia.length().

 

Gorzej, jeśli jest kilka linii o tej samej długości to wtedy wypisze tylko jedną z nich. W takim wypadku musiałbyś użyć Vecotra i pogłówkować troszkę.


(Drobok) #7

Po co liczyć linie ?

#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
int main()
{
    string linia;
    fstream plik; 
    plik.open("wizytowka.txt", ios::in);
    if(plik.good() == true){
	bool nt=0;
        while(!plik.eof()){
			getline(plik, linia);
			if(nt^=1)
				cout << linia << endl; //wyświetlenie linii
		}
		plik.close();
	}else cout << "BRAK TAKIEGO PLIKU!" << endl;
    system("PAUSE");
    return 0;
}

@ostatnie pytanie, po co zmienna licz skoro to samo masz w obiekcie którego używasz do przechowywania ciągu znaków ?

if(linia.length()>tmp.length()) tmp=linia;//wartość będzie w tmp