#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();
}
Nic nie trzeba zmieniać.
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?
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...
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.
Właśnie o to mim chodzi @kmph, tylko nie wiem jak to zrobić
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.
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?
Powoli przestaję wierzyć, że to Twój kod.
uczę sie programowania od miesiąca, od wczoraj wiem, że można otworzyć program przez konsole...
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;
}