[C++] Funkcja zawiesza się, nie wykonuje żadnych działań


(Brawos) #1
void deszyfrujzpliku()
{	
	char d;
	string maxalm;
	int dlugosc;
	char litery[36] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0' };
	string znaczki[36] = { "._", "_...", "_._.", "_..", ".", ".._.", " __.", "....", "..", ".___", "_._", "._..", " __", "_.", "___", ". __.", "__._", "._.", "...", "_", ".._", "..._", ". __", "_.._", "_.__", " __..", ".____", ".. ___", "...__", "...._", ".....", "_....", " __...", "___..", " ____.", "_____" };	
	string nazwa_in;
	string nazwa_out;

	cout << "Podaj nazwe pliku wejsciowego" << endl;
	cin >> nazwa_in;
	nazwa_in = nazwa_in + ".txt";
	cout << "Podaj nazwe pliku wyjsciowego" << endl;
	cin >> nazwa_out;
	nazwa_out = nazwa_out + ".txt";

	ifstream ifs;
	ofstream ofs;

	ifs.open(nazwa_in);
	if (!ifs) {
		cout << "Nieudane otwarcie pliku " << nazwa_in << endl;
		return;
	}
	ofs.open(nazwa_out);
	if (!ofs) {
		cout << "Nieudane otwarcie pliku " << nazwa_out << endl;
		return;
	}
	
	dlugosc = 0;

	while (ifs.get(d))
	{
		if (d != '/'){
			maxalm = maxalm + d;
			dlugosc++;
		}
		if (d == '/'){
			for (int i = 0; i < 36; )
				if (maxalm == znaczki[i]){
					ofs << litery[i];
					maxalm.erase(0, dlugosc);
				}
		}
	}

	ifs.close();
	ofs.close();
	ifs.clear();
	ofs.clear();
}

 

Witam, 

na wstępie mam do wykonania program który szyfruje i deszyfruje alfabet morsa z pliku tekstowego w c++. O ile z szyfrowaniem problemu nie ma, tak z deszyfrowaniem jest. W tej funkcji program się wiesza i nie za bardzo wiem dlaczego, może ktoś mi z tym pomóc?


(Grzelix) #2

Linia 41, 

obstawiam że powinno być: 

for (int i = 0; i < 36; i++ )

(Brawos) #3

Działa, faktycznie, ale wstyd :<


(Ryan) #4

Taki drobiazg: alfabet Morse'a to kod a nie szyfr. Różnica jest subtelna, ale istnieje. :slight_smile: Prawdopodobnie też chcesz użyć std::tolower() skoro litery nie zawierają kapitalików.