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