Witam... Nie za bardzo ogarniam sie w c++ , więc jeżeli mógłbym prosić uniżenie o pomoc to by bylo super :D...
Otóż mam do napisania program haszujacy z bazą słów + hasło które użytkownik wpisze. Już kij z tym że tablica ma byc max 100 elementowa i każdy element w indeksie ma być listą. z tym chyba sobie poradzę... ale nie umiem ogarnąć jak ta baza słów(która u mnie jest wczytywana z pliku do stringa) ma zostać zhaszowana... ogólnie mam problem z funkcją gdzie program ma za zadanie zrobić z każdego słowa w bazie hasz i dalej ten hasz wpisać do wyżej wymienionej tablicy(a jesli już taka liczba istnieje to wpisać jako kolejny element listy)... Innymi słowy string zamienić na wiele małych stringów i z kazdego z nich po kolei ma wyliczyć hasze... Jak to zrobić? Zaznaczam że nie ogarniam C, nie ogarniam (jeszcze) list i jestem na poziomie,erm...struktur? Taa... także klasy też mi obce..
Na razie mam to(czyt.jeden wielki chaos):
#include <iostream>
#include <stdlib.h>
#include <string>
#include <fstream>
using namespace std;
int liczba;
wchar_t tab[]=
{
'?','/','.','>','<',',','M','N','B','V',
'C','X','Z','A','S','D','F','G','H','J',
'K','L',';',':','"','|',']','}','{','[',
'P','O','I','U','Y','T','R','E','W','Q',
'+','=','-','_','0',')','(','9','*','8',
'%','5','4','$','3','#','@','2','!','1',
'~','`','q','w','e','r','t','y','u','i',
'o','p','a','s','d','f','g','h','j','k',
'l','z','x','c','v','b','n','m','&','7',
'6','^',
};
typedef struct{
wchar_t tab[S]; //moze byc tez char
int dl;
string p;
}struktura;
string slowa()//moja biblioteka ktora jest wczytywana z pliku
{
string slowa;
fstream plik("nazwa.txt",ios::in); //(nazwa umieszczona w folderze z kodem źródłowym)
getline(plik, slowa);//( w nawiasach kolejno: argument z którego są zczytywane dane, zmienna do ktorej są wczytywane dane)
void close(void);
return slowa;
}
struktura strpassword()
{
struktura strpassword;
cout<<"\nPlease enter your password: ";
cin>>strpassword.p;
return strpassword;
}
int encryptor(struktura strpassword)
{
struktura nowatab;
int sumakontrolna=0;
for(int i=0;i<strpassword.p.length();i++)
nowatab.tab[i]=0;
for(int j=0; j<strpassword.p.length();j++)
for(int i=0;i<92;i++)
if(strpassword.p[j]==tab[i])
nowatab.tab[j]=i;//kodowanie hasla
for(int i=0;i<strpassword.p.length();i++)
sumakontrolna=sumakontrolna+nowatab.tab[i]; //obliczanie sumy kontrolnej
if(sumakontrolna>100)
do
sumakontrolna=sumakontrolna%2;
while(sumakontrolna>100); //przycinanie sumy kontrolnej do 100 żeby tablica nie urosła
return sumakontrolna;
}
void strcpy(char *zrodlo)
{
struktura strpassword;
int suma;
bool wyr=false;
for(;*zrodlo;++zrodlo) // pętla znak po znaku ze źródła
{
if(*zrodlo!=' ') // jeżeli nie spacja
{
if(!wyr) // jeżeli to pierwsza litera słowa
{
if(suma*suma++=' ')
{
wyr=true; // już jesteśmy w słowie
*zrodlo=strpassword.p;
struktura nowatab;
int sumakontrolna=0;
for(int i=0;i<strpassword.p.length();i++)
nowatab.tab[i]=0;//zerowanie nowataba...bo by były krzaki...
for(int j=0; j<strpassword.p.length();j++)
for(int i=0;i<92;i++)
if(strpassword.p[j]==tab[i])
nowatab.tab[j]=i;//kodowanie hasla
for(int i=0;i<strpassword.p.length();i++)
sumakontrolna=sumakontrolna+nowatab.tab[i]; //obliczanie sumy kontrolnej
if(sumakontrolna>100)
do
sumakontrolna=sumakontrolna%2;
while(sumakontrolna>100); //przycinanie sumy kontrolnej do 100 żeby tablica nie urosła
}
}
else wyr=false; // już jesteśmy pomiędzy słowami
}
}
int main()
{
cout<<"############################################"<<endl;
cout<<" ### PASSWORD ENCRYPTOR(1) ### "<<endl;
cout<<" ### HASH DECRYPTOR(2) ### "<<endl;
cout<<" ### SEEK & FIND (3) ### "<<endl;
cout<<" ### EXIT(0) ### "<<endl;
void strcpy(string *zrodlo,char *suma);
char suma[100];
cin>>liczba;
switch(liczba)
{
case 1:
{
system("CLS");
cout<<"### PASSWORD ENCRYPTOR ###\n\n"<<endl;
cout<<"initializing encryption stream # .......\n"<<endl;
system("PAUSE");
encryptor(strpassword());
strcpy(slowa,suma);
}
case 2:
{
cout<<"### PASSWORD DECRYPTOR ###\n\n";
system("PAUSE");
system("CLS");
}
case 3:
{
cout<<"######### SEEK & FIND ################"<<endl;
return main();
}
case 0: break;
default: cout<<"jeszcze raz..."<<endl;
}
return 0;
}
Już nie patrzeć na te wchar_t... akurat szybkość wykonywania i wielkość najmniej mnie interesują...eh..