• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Porównianie dwóch plików .txt - C++

Object Storage Arubacloud
+1 głos
481 wizyt
pytanie zadane 22 października 2021 w C i C++ przez Vifuso Nowicjusz (170 p.)

Witam, mam pewien problem. Ponieważ mam do zrobienia program. Który wczyta i porówna dwa pliki .txt. Linijka po linijce i wyświetli liczbę różnic jakie są w konkretnej linijce. Mam to być zrobione w klasie i metodach. Koncepcja na ten program jest taka, że jedna metoda wczytuje pliki, linijka po linijce; druga będzie zamieniała konkretne linijki (np. 1 linijka z test1.txt oraz 1 linijka z test2.txt) i porównywała oby dwie linijki, jeżeli będzie różnica w linijce to wyświetli ilość różnicy. Jestem bardziej początkującym, niż doświadczonym programistą i nie wiem jak mogę to wykonać. Szukałem porad w google i nic nie znalazłem.

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
#include <conio.h>
using namespace std;

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

class program {
	public: 
		void wczytanie() {
			fstream odczyt;
            odczyt.open("test1.txt");
            string linia1;
            do {
                getline(odczyt, linia1);
                cout<<linia1<<endl;
            }
            while(linia1 != "");
            odczyt.close();
            cout<<"----------------------"<<endl;
            fstream odczyt1;
            odczyt1.open("test2.txt");
			string linia2;
			do {
                getline(odczyt1, linia2);
                cout<<linia2<<endl;
            }
            while(linia2 != "");
            odczyt1.close();
		}
		void zamiana() {
			
			//myslalem, zeby te wczytywanie zrobic w 
			//petli i dac warunki po czym by wyskakiwaly 
			//roznice
			
			//Compare(String, String)
			
		}
};

int main(int argc, char** argv) {
	program obiekt1;
	obiekt1.wczytanie();
	
	
   
	return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 22 października 2021 przez j23 Mędrzec (194,920 p.)

Kombinujesz trochę jak koń pod górę:

std::ifstream is1("A.txt");
std::ifstream is2("B.txt");
std::string line1, line2;

while (std::getline(is1, line1) && std::getline(is2, line2)) {
    // tu porównujesz line1 z line2 i wyświetlasz to, co masz wyświetlić.
}

 

komentarz 29 października 2021 przez Vifuso Nowicjusz (170 p.)

Działa wszystko. Mam tylko jeszcze problem, bo próbuje jeszcze dodać, aby wyświetlała się liczba linijek w której jest różnica. A jedyne co mi wychodzi to, zawsze [0].

int main(int argc, char** argv) {
	ifstream is1("A.txt");
	ifstream is2("B.txt");
	string line1, line2;
	
	for(int i=0; i<100; i++){
		//cout<<"["<<i<<"]"<<endl; 
		while (std::getline(is1, line1) && std::getline(is2, line2)) {
		
		if(line1.compare(line2) == 0) 
			cout<<"Identycznie"<<endl; 
             // cout<<"Linijki sa takie same"<<endl;
		else 
			cout<<"Roznice "<<endl;
		}
	}
		
		
	return 0;
}

 

komentarz 29 października 2021 przez j23 Mędrzec (194,920 p.)

No to zrób jakiś licznik i powiększaj go, gdy linie będą się różnić. Po koniec wyświetl jego  wartość.

Po co ta pętla for?

Podobne pytania

0 głosów
1 odpowiedź 1,169 wizyt
pytanie zadane 24 sierpnia 2017 w C i C++ przez Vendari Nowicjusz (150 p.)
0 głosów
5 odpowiedzi 1,891 wizyt

92,666 zapytań

141,564 odpowiedzi

320,022 komentarzy

62,033 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...