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

Program do szyfrowania nie działa.

Object Storage Arubacloud
0 głosów
313 wizyt
pytanie zadane 2 kwietnia 2018 w C i C++ przez FaloY Bywalec (2,180 p.)

Witam mam problem z moim kodem. Do rzeczy,

void crypt()
{
	cout << "Please enter your text to crpyt. [MAX. 50 WORDS! MIN. 5 WORDS!]" << endl;
	cin >> string_to_crypt;
	if (string_to_crypt.length() > 50) { cout << "ERROR!" << endl; exit(1); } //Wiadomo
	if (string_to_crypt.length() < 5) { cout << "ERROR!" << endl; exit(1); } // Wiadomo

	for (char i; i < string_to_crypt.length(); ++i) //Petla dzieki ktorej wszystko sie zapetla
	{
		//string_save = string_save + string_to_crypt_if_stop; //Nie dziala.
		cout << string_to_crypt[i] << endl; //Wysywietlanie pierwszej literki
		string_to_crypt_if_stop++; // Do zatrzymania pentli, kiedy wypisuje literki
		if (string_to_crypt_if_stop == string_to_crypt.length()) //Porownywanie, do zatrzyamnia literki
		{
			if (store_string_to_crypt[0] && "A", "a", "B", "b", "C", "c" "D", "d", "E", "e", "F", "f", "G", "g", "H", "h", "I", "i", "J", "j", "K", "k", "L", "l", "M", "m", "N", "n", "O", "o", "P", "p", "R", "r", "S", "s", "T", "t", "U", "u", "W", "w", "Y", "y", "Z", "z" )
			{
				for (int bdj = 0; bdj < string_to_crypt.length(); ++bdj)
				{
					cout << "Literka: " << string_to_crypt[bdj] << endl;
					for (int a_crpyt_full = 0; a_crpyt_full < 1; a_crpyt_full++)
					if (string_to_crypt[bdj] && "A", "a")
					{
						cout << "629610" << endl;
						a = a + 629610;
					}
					if (string_to_crypt[bdj] && "B", "b")
					{
						b = b + 947;
					}
					if (string_to_crypt[bdj] && "C", "c")
					{
						c = c + 720;
					}
					if (string_to_crypt[bdj] && "D", "d")
					{
						
					}
					if (string_to_crypt[bdj] && "E", "e")
					{
						
					}
					if (string_to_crypt[bdj] && "F", "f")
					{
						
					}
					if (string_to_crypt[bdj] && "G", "g")
					{
						
					}
					if (string_to_crypt[bdj] && "H", "h")
					{
						
					}
					if (string_to_crypt[bdj] && "I", "i")
					{
						
					}
					if (string_to_crypt[bdj] && "J", "j")
					{
						
					}
					if (string_to_crypt[bdj] && "K", "k")
					{
						
					}
					if (string_to_crypt[bdj] && "L", "l")
					{
						
					}
					if (string_to_crypt[bdj] && "M", "m")
					{
						
					}
					if (string_to_crypt[bdj] && "N", "n")
					{
						
					}
					if (string_to_crypt[bdj] && "O", "o")
					{
						
					}
					if (string_to_crypt[bdj] && "P", "p")
					{
						
					}
					if (string_to_crypt[bdj] && "R", "r")
					{
						
					}
					if (string_to_crypt[bdj] && "S", "s")
					{
						
					}
					if (string_to_crypt[bdj] && "T", "t")
					{
						
					}
					if (string_to_crypt[bdj] && "U", "u")
					{
						
					}
					if (string_to_crypt[bdj] && "W", "w")
					{
						
					}
					if (string_to_crypt[bdj] && "Y", "y")
					{
						
					}
					if (string_to_crypt[bdj] && "Z", "z")
					{
						
					}
					cout << "Wynik: " << a << b << c << endl;
					cin >>a ;
				}
			}
		}
	}
}

więc jeżeli wpiszę np: "abc" to dam mi tam jakiś wynik, jak wpiszę "cba", to dam mi taki sam wynik jak "abc" idzie to jakoś ogarnąć? + nie mam kompletnie pomysłu jak zrobić aby kodowały się tylko te literki, które zostały użyte w kolejności, abc, czyli jeśli wpiszę kot to chce aby wynik z "k" było podany jako pierwszy. Dzięki za każdą rade. Z góry dzięki

komentarz 3 kwietnia 2018 przez niezalogowany

Co tu sie dzieje crying

1 odpowiedź

+1 głos
odpowiedź 3 kwietnia 2018 przez Qwerty96 Stary wyjadacz (13,580 p.)
for (char i; i < string_to_crypt.length(); ++i)

Brakuje inicjalizacji zmiennej. Poza tym czemu char, a nie int lub jeszcze lepiej std::size_t?

Co chcesz osiągnąć w tych ifach? Te warunki nie mają żadnego sensu i są zawsze spełnione. Jak chcesz sprawdzić czy litera jest równa innej literze bez uwzględniania wielkości to raczej powinno to tak wyglądać:

if (tolower(znak) == 'a')

I ogólnie ten kod powinien być z 10 razy krótszy. Jak wypisujesz w jednym ifie każdą literę alfabetu w dwóch kombinacjach z dużą i małą literą, to wiedz, że coś robisz źle.

komentarz 3 kwietnia 2018 przez FaloY Bywalec (2,180 p.)

Poza tym czemu char, a nie int.

 Ponieważ wyskakiwał mi błąd, że nie może przekonwertować char na int.

if (tolower(znak) == 'a')

 Mógłbyś bardziej to objaśnić? Dzięki!

komentarz 3 kwietnia 2018 przez gagyn Stary wyjadacz (11,050 p.)
edycja 3 kwietnia 2018 przez gagyn
Nie idź na łatwiznę! Zobacz dlaczego pokazuje "nie można przekonwertować char na int", raczej powinien działać int.

Tolower(znak) zamienia znak na małą literę:

tolower('A') -> 'a'

Zamiast:

if (string_to_crypt[bdj] && "A", "a")

Zrob:

if (tolower( string_to_crypt[bdj] ) == 'a')
1
komentarz 3 kwietnia 2018 przez Qwerty96 Stary wyjadacz (13,580 p.)

Funkcja tolower zamienia literę z dużej na małą w razie potrzeby. Zatem ten przykładowy warunek, który podałem jest spełniony, gdy znak == 'a' lub znak == 'A'. W miejsce 'znak' wstawiasz to, co chcesz porównać, czyli w Twoim przypadku będzie to wyrażenie string_to_crypt[bdj] lub coś w tym rodzaju. Do korzystania z funkcji tolower należy dorzucić dyrektywę #include <cctype>.

Ponieważ wyskakiwał mi błąd, że nie może przekonwertować char na int.

Błąd? Czy ostrzeżenie o porównywaniu typu ze znakiem i bez znaku? 

komentarz 3 kwietnia 2018 przez FaloY Bywalec (2,180 p.)

Tak to był błąd. Dobra dodałem 

if (tolower( string_to_crypt[bdj] ) == 'a')

teraz muszę zrobić aby szyfrował znak po znaku, a nie żeby poprostu szyfrował abc...

Można to jakoś zrobić 

true 
false

? Jeśli tak to mam kolejny probelm(tzn nie wiem jak mam to zapętlić, aby nie było 748596 linijek kodu, string_to_crypt[0] nie chcę sprawdać czy to ma np, literkę A czy B bo to znów generuje linijki). Myślę, że mam za ambitny projekt, jeszcze popróbuję nad nim popracować jeżeli się nie uda to go zostawię.

komentarz 3 kwietnia 2018 przez gagyn Stary wyjadacz (11,050 p.)
Nie rozumiem trochę sposobu w jaki chcesz szyfrować wyrazy.

Może warto po prostu zamieniać znak na int (tablica ASCII) I przestawiać o ileś pozycji znak?
komentarz 3 kwietnia 2018 przez FaloY Bywalec (2,180 p.)
Dużo szyfratorów jest o to opartych, naszło mnie aby zrobić coś innego

Podobne pytania

+1 głos
2 odpowiedzi 772 wizyt
pytanie zadane 15 maja 2017 w Bezpieczeństwo, hacking przez Paweł123 Nałogowiec (33,500 p.)
0 głosów
0 odpowiedzi 148 wizyt

92,553 zapytań

141,399 odpowiedzi

319,534 komentarzy

61,938 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

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!

...