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

question-closed Program sprawdzajacy haslo

Object Storage Arubacloud
0 głosów
1,720 wizyt
pytanie zadane 15 sierpnia 2017 w C i C++ przez Michał Biernacki Użytkownik (670 p.)
zamknięte 15 sierpnia 2017 przez Michał Biernacki
Witam, mam problem z moim programem sprawdzajacym hasla. A mianowicie nie wyswietla on nigdy "True".

Zeby haslo bylo prawidlowe musi:

-miec od 6 do 20 znakow,

-miec conajmniej po 1 duzej literze, malej literze oraz cyfrze

Oto link:
https://pastebin.com/L8M5kDsX
komentarz zamknięcia: Rozwiązanie problemu.

2 odpowiedzi

+1 głos
odpowiedź 15 sierpnia 2017 przez SebekChlebek Stary wyjadacz (11,290 p.)
wybrane 15 sierpnia 2017 przez Michał Biernacki
 
Najlepsza
  if(ile_big==0 || ile_small == 0 || ile_liczb==0 )   //sprawdza czy byla chociaz jedna mala lub duza litera i cyfra
    cout<<"False"<<endl;                                // jesli nie to zwraca False
    else
    cout<<"True"<<endl;   

Dałeś ten warunek 'else' do innego if'a. Zauważ, że jest za klamrą zamykającą warunek (dlugosc>=6 && dlugosc <=20).

+1 głos
odpowiedź 15 sierpnia 2017 przez niezalogowany
edycja 15 sierpnia 2017

Proponuję zrobić to tak:

#include <iostream>
#include <string>

using namespace std;

int main()
{
	int ile;
	cin >> ile;    //ile testow

	for (int i = 1; i <= ile; i++)
	{
		string password;
		int ile_big = 0;  //deklaracja wszystkich zmiennych niezbednych do sprawdzania
		int ile_small = 0;
		int ile_liczb = 0;
		cin >> password;      //wczytuje haslo

		int dlugosc = password.length();        //jego dlugosc

		bool good = false;


		if (dlugosc < 6 || dlugosc > 20)   //jesli haslo ma mniej niz 6 znakow lub wiiecej niz 20 to zwroc False
			good = false;
		else // po co tamto wczesniejsze skoro taka role pelni else
		{

			for (int j = 0; j<dlugosc; j++) // do dlugosc
			{
				if (password[j] <= 90 && password[j] >= 65)
					ile_big++;

				else if (password[j] <= 122 && password[j] >= 97)
					ile_small++;

				else if (password[j] <= 57 && password[j] >= 48)
					ile_liczb++;
			}

			if (ile_big == 0 || ile_small == 0 || ile_liczb == 0)
				good = false;
			else
				good = true;

			// lub good = !(ile_big == 0 || ile_small == 0 || ile_liczb == 0);
		}

		if (good) cout << "True\n";
		else cout << "False\n";
			
		
	}
}


Pamiętaj, że przy sprawdzaniu czy znak jest duża/wielka litera czy liczba masz takie funkcje jak: isupper, islower, isdigit. Poza tym masz błąd w pętli j<dlugosc-1 powinno być j<dlugosc

komentarz 15 sierpnia 2017 przez Michał Biernacki Użytkownik (670 p.)
Dzięki, skorzystam z tych funkcji ;)
1
komentarz 15 sierpnia 2017 przez SebekChlebek Stary wyjadacz (11,290 p.)
edycja 15 sierpnia 2017 przez SebekChlebek

Pętla jest dobra, metoda length zwraca ilość znaków ale indeksujemy je w tablicy od zera. Twoja pętla wychodziłaby po za zakres.

1
komentarz 15 sierpnia 2017 przez niezalogowany

Dzięki za uzupełnienie mnie, ale mam uwagę - pętla indeksowana od 0 do password.length()-1 nie sprawdziłaby całego hasła (przykład "1 AA112a").

komentarz 15 sierpnia 2017 przez SebekChlebek Stary wyjadacz (11,290 p.)
Ach tak, masz rację :)

Podobne pytania

–1 głos
2 odpowiedzi 165 wizyt
pytanie zadane 5 czerwca 2017 w PHP przez SzukającyPrzygód Bywalec (2,310 p.)
–1 głos
1 odpowiedź 175 wizyt
pytanie zadane 17 lutego 2017 w PHP przez krispello Obywatel (1,440 p.)
+1 głos
1 odpowiedź 206 wizyt
pytanie zadane 20 stycznia 2021 w C i C++ przez MateuszFisch Początkujący (250 p.)

92,547 zapytań

141,390 odpowiedzi

319,509 komentarzy

61,931 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!

...