Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Pseudo baza w C++


Rekomendowane odpowiedzi

Opublikowano

Witam, Na dobry początek podziękuje ci za wyświetlenie mojego tematu, i życzę Miłego Wieczoru/Dobrej Nocy/Miłego Dnia
WhatEver... xD

otóż jak w temacie, mam problem z c++ a do dokładniej...
Pierw Spójrzcie kod

 

Wyjaśnienie problemy gdy już lookniesz code 

Wyjaśnienie problemy gdy już lookniesz code


Jak widać tym kodem chce uzyskać coś w stylu "PRZYPOMINAJKA HASLA?" 
w mojej Pseudo Bazie danych mam zapisane swoje loginy i hasla 

a " if'y " mają po prostu za zadanie sprawdzić czy podany przeze mnie login nie pasuje do któregoś z nich jesli tak 
wyświetlić odpowiednie do tego loginu hasło. Jako iż jest to tak zrobione ze login[0] odpowiada haslo[0] to wyświetli mi odpowiednie hasło do każdego loginu 

teraz do rzeczy...

W przykładzie podałem wam jedynie skrawek kodu, 3 loginy  3 IFY
ale gdybym chciał zrobić tego z 100 NP? 

jak wiele by tych ifów było... setki linijek kodu, czy serio to jest jedyny sposób na wykonanie tego zadania?
nie ma jakiegoś innego by zapisać to krócej, Nie wiem... coś w stylu ze Jeden IF bedzie wykonywał całą robotę ?

Z góry dziękuje za pomoc. 
Wiem ze trochę chaotycznie napisane co głównie chce tu uzyskać, ale nie wiem jak dobrze to opisać, mam nadzieje ze bedzie tu wszystko zrozumiałem, w przypadku gdy ktoś nie zrozumiał do końca a chciał pomóc, i byłby tak dobry by napisac do mnie na PW, to w sumie nie wiem... XDD dziękuje z góry i limit like jedynie moge dać :D
tak całkiem serio, za każdą pomoc bardzo dziękuje bedoo lajki i 5stars 

string login[30];
string haslo[30]
 
//Pseudo BAZA DANYCH
login[ 0 ] = "konto0";
login[ 1 ] = "konto1";
login[ 2 ] = "konto2";
 

haslo[ 0 ] = "PassDoKonto0";
haslo[ 1 ] = "PassDoKonto1";
haslo[ 2 ] = "PassDoKonto2";
 
//System WYSWIETLANIA HASLA
 

 
if (ID == login[0])
{
cout << endl << "HASLO DO KONTA: " << login[0] << " TO: " << haslo[0];
cout << endl<<endl;
}
 
else if (ID == login[1])
{
cout << endl << "HASLO DO KONTA: " << login[1] << " TO: " << haslo[1];
cout << endl << endl;
}
 
else if (ID == login[2])
{
cout << endl << "HASLO DO KONTA: " << login[2] << " TO: " << haslo[2];
cout << endl << endl;
}
 
// oczywiście tego tu jest wiecej... 
// i na końcu else

else 
{
cout<<endl<<"PODANY LOGIN NIE ISTNIEJE"; //przykładowo 
}
 
Gość 67d64b62d9
Opublikowano

do takich zadań lepszy switch, a poza tym to najwygodniej byłoby to zapisać do pliku w formie

login:hasło
login:hasło
login:hasło
login:hasło
login:hasło

iterować przez plik i w ten sposób możesz wygodnie dodawać i edytować te dane

natomiast jeśli to nie jest jakaś praca domowa czy coś to najlepiej byłoby się zaopatrzyć w prawdziwy manager haseł, np. keepass
// @GrimWP

Opublikowano

do takich zadań lepszy switch, a poza tym to najwygodniej byłoby to zapisać do pliku w formie

login:hasło
login:hasło
login:hasło
login:hasło
login:hasło

iterować przez plik i w ten sposób możesz wygodnie dodawać i edytować te dane

natomiast jeśli to nie jest jakaś praca domowa czy coś to najlepiej byłoby się zaopatrzyć w prawdziwy manager haseł, np. keepass

// @GrimWP

niee, to nie jest zadanie domowe. Robiłem to dla siebie, w celu dodatkowej nauki i tak ogólnie bo uznałem ze fajnie by takie coś mieć :D

Ale nie jest mi to aż tak potrzebne bym musiał pobierać sobie jakieś prawdziwe Managery Haseł, wiec zrobię sobie trochę Ubogi, ale własny XDD

rozgarną to tak jak ty mówiłeś chyba. tylko ze gdy zapisze moje hasła i loginy w pliku to minie mi sie z celem. Bo po co mi taka apka skoro moge sobie otworzyć plik i zlukać z niego moje hasło. No nic, bede coś kombinował :D

 

ale czekam na jeszcze jakieś pomysły jakby kto posiadał 

Gość 67d64b62d9
Opublikowano

 

do takich zadań lepszy switch, a poza tym to najwygodniej byłoby to zapisać do pliku w formie

login:hasło
login:hasło
login:hasło
login:hasło
login:hasło

iterować przez plik i w ten sposób możesz wygodnie dodawać i edytować te dane

natomiast jeśli to nie jest jakaś praca domowa czy coś to najlepiej byłoby się zaopatrzyć w prawdziwy manager haseł, np. keepass

// @GrimWP

niee, to nie jest zadanie domowe. Robiłem to dla siebie, w celu dodatkowej nauki i tak ogólnie bo uznałem ze fajnie by takie coś mieć :D

Ale nie jest mi to aż tak potrzebne bym musiał pobierać sobie jakieś prawdziwe Managery Haseł, wiec zrobię sobie trochę Ubogi, ale własny XDD

rozgarną to tak jak ty mówiłeś chyba. tylko ze gdy zapisze moje hasła i loginy w pliku to minie mi sie z celem. Bo po co mi taka apka skoro moge sobie otworzyć plik i zlukać z niego moje hasło. No nic, bede coś kombinował :D

 

ale czekam na jeszcze jakieś pomysły jakby kto posiadał 

 

równie dobrze możesz ją otworzyć disassemblerze wyjdzie na to samo, jak już masz takie problemy to zapisz sobie ten plik w postaci base64 i zczytuj go używając odpowiedniej konwersji.

natomiast jeśli chcesz na siłę zapisywać te dane w aplikacji to zostaw te dwie tablice tak jak są teraz i zrób tak:

int find_index(int a[], int num_elements, int value) {
   int i;
   for (i=0; i<num_elements; i++) {
	 if (a[i] == value) {
	    return(value);
	 }
   }
   return(-1); 
}

int main(void) {
  string login[30];
  string haslo[30]
 
  login[ 0 ] = "konto0";
  login[ 1 ] = "konto1";
  login[ 2 ] = "konto2";
 

  haslo[ 0 ] = "PassDoKonto0";
  haslo[ 1 ] = "PassDoKonto1";
  haslo[ 2 ] = "PassDoKonto2";

  int index = -1;
  index = find_index(login, 3, ID); // tablica login - liczba jej elementów - szukana
  printf("hasło do konta: %s, to: %s", login[index], haslo[index]);
}

generalnie to jest pseudokod ale powinen się skompilować, chodzi mi o to żebyś znalazł indeks tego elementu w tablicy login i na tej podstawie podał korespondujący w tablicy hasło

Opublikowano

 

 

 

 

do takich zadań lepszy switch, a poza tym to najwygodniej byłoby to zapisać do pliku w formie

login:hasło
login:hasło
login:hasło
login:hasło
login:hasło

iterować przez plik i w ten sposób możesz wygodnie dodawać i edytować te dane

natomiast jeśli to nie jest jakaś praca domowa czy coś to najlepiej byłoby się zaopatrzyć w prawdziwy manager haseł, np. keepass
// @GrimWP

niee, to nie jest zadanie domowe. Robiłem to dla siebie, w celu dodatkowej nauki i tak ogólnie bo uznałem ze fajnie by takie coś mieć :D
Ale nie jest mi to aż tak potrzebne bym musiał pobierać sobie jakieś prawdziwe Managery Haseł, wiec zrobię sobie trochę Ubogi, ale własny XDD
rozgarną to tak jak ty mówiłeś chyba. tylko ze gdy zapisze moje hasła i loginy w pliku to minie mi sie z celem. Bo po co mi taka apka skoro moge sobie otworzyć plik i zlukać z niego moje hasło. No nic, bede coś kombinował :D

ale czekam na jeszcze jakieś pomysły jakby kto posiadał 

 

równie dobrze możesz ją otworzyć disassemblerze wyjdzie na to samo, jak już masz takie problemy to zapisz sobie ten plik w postaci base64 i zczytuj go używając odpowiedniej konwersji.

natomiast jeśli chcesz na siłę zapisywać te dane w aplikacji to zostaw te dwie tablice tak jak są teraz i zrób tak:

int find_index(int a[], int num_elements, int value) {
   int i;
   for (i=0; i<num_elements; i++) {
	 if (a[i] == value) {
	    return(value);
	 }
   }
   return(-1); 
}

int main(void) {
  string login[30];
  string haslo[30]
 
  login[ 0 ] = "konto0";
  login[ 1 ] = "konto1";
  login[ 2 ] = "konto2";
 

  haslo[ 0 ] = "PassDoKonto0";
  haslo[ 1 ] = "PassDoKonto1";
  haslo[ 2 ] = "PassDoKonto2";

  int index = -1;
  index = find_index(login, 3, ID); // tablica login - liczba jej elementów - szukana
  printf("hasło do konta: %s, to: %s", login[index], haslo[index]);
}

generalnie to jest pseudokod ale powinen się skompilować, chodzi mi o to żebyś znalazł indeks tego elementu w tablicy login i na tej podstawie podał korespondujący w tablicy hasło

 

 



dwa błędy ;c
 

 
Błąd C2664 „int find_index(int [],int,int)”: nie można dokonać konwersji argumentu 1 z „std::string [30]” do „int []”
 
Błąd (aktywny) brak odpowiedniej funkcji konwersji elementu "std::string" na "int"


 
 
int index = -1;
index = find_index(login, 3, ID); // tablica login - liczba jej elementów - szukana   // <--------- tu błedy w  login oraz "ID" po "find_index"
printf("hasło do konta: %s, to: %s", login[index], haslo[index]);
 
 
}
 
Gość 67d64b62d9
Opublikowano

 

 

 

 

 

do takich zadań lepszy switch, a poza tym to najwygodniej byłoby to zapisać do pliku w formie

login:hasło
login:hasło
login:hasło
login:hasło
login:hasło

iterować przez plik i w ten sposób możesz wygodnie dodawać i edytować te dane

natomiast jeśli to nie jest jakaś praca domowa czy coś to najlepiej byłoby się zaopatrzyć w prawdziwy manager haseł, np. keepass

// @GrimWP

niee, to nie jest zadanie domowe. Robiłem to dla siebie, w celu dodatkowej nauki i tak ogólnie bo uznałem ze fajnie by takie coś mieć :D

Ale nie jest mi to aż tak potrzebne bym musiał pobierać sobie jakieś prawdziwe Managery Haseł, wiec zrobię sobie trochę Ubogi, ale własny XDD

rozgarną to tak jak ty mówiłeś chyba. tylko ze gdy zapisze moje hasła i loginy w pliku to minie mi sie z celem. Bo po co mi taka apka skoro moge sobie otworzyć plik i zlukać z niego moje hasło. No nic, bede coś kombinował :D

 

ale czekam na jeszcze jakieś pomysły jakby kto posiadał 

 

równie dobrze możesz ją otworzyć disassemblerze wyjdzie na to samo, jak już masz takie problemy to zapisz sobie ten plik w postaci base64 i zczytuj go używając odpowiedniej konwersji.

natomiast jeśli chcesz na siłę zapisywać te dane w aplikacji to zostaw te dwie tablice tak jak są teraz i zrób tak:

int find_index(int a[], int num_elements, int value) {
   int i;
   for (i=0; i<num_elements; i++) {
	 if (a[i] == value) {
	    return(value);
	 }
   }
   return(-1); 
}

int main(void) {
  string login[30];
  string haslo[30]
 
  login[ 0 ] = "konto0";
  login[ 1 ] = "konto1";
  login[ 2 ] = "konto2";
 

  haslo[ 0 ] = "PassDoKonto0";
  haslo[ 1 ] = "PassDoKonto1";
  haslo[ 2 ] = "PassDoKonto2";

  int index = -1;
  index = find_index(login, 3, ID); // tablica login - liczba jej elementów - szukana
  printf("hasło do konta: %s, to: %s", login[index], haslo[index]);
}

generalnie to jest pseudokod ale powinen się skompilować, chodzi mi o to żebyś znalazł indeks tego elementu w tablicy login i na tej podstawie podał korespondujący w tablicy hasło

 

 

 

 

dwa błędy ;c

 

 
Błąd C2664 „int find_index(int [],int,int)”: nie można dokonać konwersji argumentu 1 z „std::string [30]” do „int []”

 
Błąd (aktywny) brak odpowiedniej funkcji konwersji elementu "std::string" na "int"

 

 

 
 
int index = -1;
index = find_index(login, 3, ID); // tablica login - liczba jej elementów - szukana   // <--------- tu błedy w  login oraz "ID" po "find_index"
printf("hasło do konta: %s, to: %s", login[index], haslo[index]);
 
 
}

 

no już naprawdę myślałem, że samemu chcesz się czegoś nauczyć. biorąc pod uwagę, że mam dzisiaj dobry humor to wklejam ci kod ale powinieneś się wstydzić za brak myślenia

chodziło o sam pomysł jak to zrobić, a to, że akurat dołączyłem kawałek kodu napisanego bezpośrednio na forum to już inna sprawa. to są maksymalne podstawy pętle i instrukcje warunkowe...

#include "stdio.h";

int main(void) {
	char logins[30][256];
	char passwords[30][256];

	strcpy(logins[0], "konto0");
	strcpy(logins[1], "konto0");
	strcpy(logins[2], "konto0");

	strcpy(passwords[0], "PassDoKonto0");
	strcpy(passwords[1], "PassDoKonto0");
	strcpy(passwords[2], "PassDoKonto0");

	int index = -1;
	for (int i = 0; i < 10; i++) {
		if (strcmp("konto0", logins[i]) == 0) { index = i; break; }
	}

	printf("haslo do konta: %s, to: %s\n", logins[index], passwords[index]);

	system("pause");
}

wynik:

3Ro3OrC.png

Opublikowano

Lol ludzie kto tera korzysta z tablic. Użyj kontenera map<string, string> i danemu loginowi będziesz miał przypisane hasło. Wtedy tylko np. hasla["konto1"] i będziesz miało hasło dla konta1

RAsfepN.png
Opublikowano
#include <iostream>
#include <string>
#include <fstream>

const auto& GetLine = static_cast<std::istream&(*)(std::istream&, std::string&)>(std::getline);

std::string GetLogin(std::string line)
{
	return line.substr(0, line.find(' '));
}

int main(int argc, char** argv)
{
	if (argc != 2)
	{
		std::cout << "Using: <login>\n";
		return 1;
	}

	const auto FILENAME = "pass.txt";
	
	std::ifstream dataFile(FILENAME);
	if (dataFile.fail())
	{
		std::cout << FILENAME << " don't exist.\n";
		return 2;
	}

	std::string sLogin(argv[1]);
	std::string sLine;

	while (GetLine(dataFile, sLine))
	{
		if (GetLogin(sLine) == sLogin)
		{
			std::cout << sLine << '\n';
		}
	}

	dataFile.close();
	return 0;
}

Można też wczytać z pliku :P

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...