Jak zmienić treść kodu, by był uruchamiany przez wiersz poleceń?

0
#include <iostream>
#include <string>
#include <fstream>

using namespace std;

void znajdz(string sciezka_wejscia, string sciezka_wzorca, string sciezka_wyjscia);  

int main() 
{
	znajdz("wejscie.txt", "wzorzec.txt", "wyjscie.txt"); 

	cin.get();
	return 0;

}

void znajdz(string sciezka_wejscia, string sciezka_wzorca, string sciezka_wyjscia)   
{
	ofstream plik_wyjsciowy;
	plik_wyjsciowy.open(sciezka_wyjscia);
	if (!plik_wyjsciowy.is_open())
	{
		return;
	}

	ifstream plik_wejsciowy;
	plik_wejsciowy.open(sciezka_wejscia);			
	if (!plik_wejsciowy.is_open())
	{
		plik_wyjsciowy.close();
		return;
	}

	ifstream plik_wzorca;
	plik_wzorca.open(sciezka_wzorca);
	if (!plik_wzorca.is_open())
	{
		plik_wyjsciowy.close();
		plik_wejsciowy.close();
		return;
	}



	const int rozmiar_tablicy = 2;     
	string wzorce[rozmiar_tablicy];    
	int ilosc_wzorcow;
	for (ilosc_wzorcow = 0; !plik_wzorca.eof(); ilosc_wzorcow++) 
	{
		if (ilosc_wzorcow >= rozmiar_tablicy)   
		{
			cout << "Zostala podana zbyt duza liczba wzorcow. Maksymalan liczba wzorcow to " << rozmiar_tablicy;
			return;
		}
		getline(plik_wzorca, wzorce[ilosc_wzorcow]); 

	}

	cout << "linia:znak" << "\t" << "znaleziony tekst" << endl << endl;  
	plik_wyjsciowy << "linia:znak" << "\t" << "znaleziony tekst" << endl << endl;

	for (int numer_lini = 0; !plik_wejsciowy.eof(); numer_lini++)  
	{
		string linia;
		getline(plik_wejsciowy, linia); 

		for (int numer_wzorca = 0; numer_wzorca < ilosc_wzorcow; numer_wzorca++) 
		{

			for (int pierwszy_znak = 0; pierwszy_znak < linia.size(); pierwszy_znak++) 
			{
				for (int ktora_literka_wzorca = 0; ktora_literka_wzorca + pierwszy_znak < linia.size(); ktora_literka_wzorca++)  
				{
					if (ktora_literka_wzorca == wzorce[numer_wzorca].size()) 
					{
						cout << numer_lini + 1 << ":" << pierwszy_znak + 1 << "\t" << linia << endl;
						plik_wyjsciowy << numer_lini + 1 << ":" << pierwszy_znak + 1 << "\t" << linia << endl;
					}
					if (wzorce[numer_wzorca][ktora_literka_wzorca] != linia[ktora_literka_wzorca + pierwszy_znak]) 
					{
						break;
					}


				}
			}
		}

	}

	plik_wejsciowy.close(); 
	plik_wyjsciowy.close();
	plik_wzorca.close();



}
0

Nic nie trzeba zmieniać.

0

Jakbym pozwolił się obudzić ukrytemu we mnie trollowi, to napisałbym, że musisz koniecznie dopisać

system(pause);

żeby to działało.

PS. Mam nadzieję, że to nie o to chodzi, prawda?

0

Gdzieś czytałam, że powinnam zmienić na coś takiego: int main(int argc, char *argv[])
a potem w treści funkcji głównej też coś powinnam pozmieniać, ale nie wiem co...

0

Gdzieś czytałam, że powinnam zmienić na coś takiego: int main(int argc, char *argv[])

Tylko jeśli chcesz móc przekazywać jakieś argumenty w wierszu poleceń.

Np. mogłabyś chcieć sparametryzować nazwy plików: ./prog -in wejscie.txt -out wyjscie.txt -pat wzorzec.txt czy tam na Windowsie prog.exe -in wejscie .txt -out wyjscie.txt -pat wzorzec.txt

Jeśli nie odczuwasz takiej potrzeby, nie trzeba.

0

Właśnie o to mim chodzi @kmph, tylko nie wiem jak to zrobić

1
int main(int argc, char* argv[])
{

}

argc - liczba przekazanych parametrów, licząc nazwę pliku.

argv - tablica stringów zawierająca parametry. Przy czym argv[0] zawsze zawiera nazwę pliku z programem. argv[1] do argv[argc-1] włącznie to są parametry.

Np przy przykładowym wywołaniu program.exe -i input.txt -o output.txt -pat wzorzec.txt będzie:

argc będzie równe 7
argv będzie zawierało: ["program.exe", "-i", "input.txt", "-o", "output.txt", "-pat", "wzorzec.txt"]

A dalej po prostu musisz w kodzie te wartości sparsować (uwaga na kolejność, powinnaś dopuścić dowolną) i wykorzystać.

if(argc > 3) {
    if(string(argv[1]) == string("-i")) {
        plik_wejsciowy = string(argv[2]);
    }
}

etc.

0

Mógłbyś zapisać to w moim kodzie, bo ja nie mam pojęcia jak to powinno wyglądać, czy powinnam dopisać coś do treści funkcji main oprócz wywołania f. znajdz?

0

Powoli przestaję wierzyć, że to Twój kod.

0

uczę sie programowania od miesiąca, od wczoraj wiem, że można otworzyć program przez konsole...

0

https://github.com/Taywee/args

ale powinno ci wystarczyć coś takiego:

int main(int argc, char* argv[]) 
{
    if (argc < 4)
    {
         cerr << "Brakuje parametrów\n";
         return 1;
    }
    znajdz(argv[1], argv[2], argv[3]); 
    return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1