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

Pytanie dotyczące zmiennych.


Rekomendowane odpowiedzi

Opublikowano

Witam po raz drugi. Uczę się pisać w c++ w konsolce. Mam pytanie, czy da się ustawić nazwe zmiennej z jakiegoś stringa? Chodzi mi np o to gdy.. Jest system rejestracji, podajemy login i haslo i do zmiennej login zapisuje się hasło? Czy jest coś takiego możliwe? 

 

Myślałem też o tablicach o nazwach login[0] i hasło[0], jak mam wyszukać np login w tablicy login i pobrać liczbe indeksu w którym znajduje się ten login, aby potem odczytać hasło.

Nie wiem czy do tego nie będą potrzebne wskaźniki których w pełni nie ogarniam

 

Plusiki będą za pomoc :)

Opublikowano

Tablica dwuwymiarowa

3587513.png


Potrzebujesz pomocy? Pisz śmiało na PW/Skype/Gadu-Gadu!


(albo napisz na forum... ^.^)

Opublikowano

Czy tablica dwuwymiarowa nie działa tylko pod integer? 

Co wpisać w kwadratowe gdy chce zrobić hasło zapisane w zmiennej o nazwie login.

string tablica[login][hasło];

 

próbowałem

string tablica[string][string];

Opublikowano

String tab[ilosc kont][2]

 

tab[nr konta][0] - login

tab[nr konta][1] - haslo

3587513.png


Potrzebujesz pomocy? Pisz śmiało na PW/Skype/Gadu-Gadu!


(albo napisz na forum... ^.^)

Opublikowano

+petla for od 0 do ilosci konto-1 z ifem ktory porownuje czy wpisane haslo to twoje haslo do konta

for(inti=0;i<ilosckont;i++) if(haslo==zmienna_haslo) cout<<dobre haslo;

Do
$wiek+=1
Until ŻycieGetMsg() = -3

zbieram +

Opublikowano

Najlepiej to zr

Najlepiej to zrobić baza danych, wtedy prostym warunkiem logicznym z WHERE sprawdzasz czy użytkownik istnieje i czy hasło jest prawidlowe

3587513.png


Potrzebujesz pomocy? Pisz śmiało na PW/Skype/Gadu-Gadu!


(albo napisz na forum... ^.^)

Opublikowano

Najlepiej to zrobić tak

struct Entry //hasło i inne dane konta, które są potrzebne do odtworzenia sesji czy obsługi tego kogoś
{
   std::string password;
};
std::map<std::string, Entry> accounts;
...
...
std::string login, password;
...
...
auto account = accounts.find(login);
if(account != accounts.end() && account.password == password)
{
   //dane poprawne
}
else
{
   //dane niepoprawne
}

Oczywiście to jest tylko prosty schemat. W rzeczywistości pewnie lepiej było by użyć bazy danych (tak jak pisze oczko, ale nie koniecznie musi być taka potrzeba) i zwiększyć bezpieczeństwo autoryzacji.

 

Ale autorowi tematu mogę jedynie polecić jakiś kurs i porządne ogarnięcie podstaw, bo po tym co pisze w tym temacie można jednoznacznie stwierdzić, że nie rozumie nawet podstawowych konstrukcji języka.

 

=========================

 

+petla for od 0 do ilosci konto-1 z ifem ktory porownuje czy wpisane haslo to twoje haslo do konta

 

Nie polecam takich rozwiązań, bo mają dużą złożoność. Najlepiej użyć struktury w formie drzewa binarnego

 

String tab[ilosc kont][2]

tab[nr konta][0] - login
tab[nr konta][1] - haslo

 

Raczej będzie potrzebował też przechowywać inne dane, więc tablica to może być za mało bo ogranicza cię do jednego typu (i jest konieczne trzymanie loginu jako liczby, co może być uciążliwe)

Opublikowano

Wszystko do klasy mozna wrzucić. Zasugerowałem tablice gdyż widać u autora podstawy. Zawsze mozna zrobić kilka vectorow w vectorze. Wtedy mogą mieć rożne typy. Popraw mnie jeśli bzdury pisze :D

3587513.png


Potrzebujesz pomocy? Pisz śmiało na PW/Skype/Gadu-Gadu!


(albo napisz na forum... ^.^)

Opublikowano
Wszystko do klasy mozna wrzucić.

 

No tak

 

Zasugerowałem tablice gdyż widać u autora podstawy.

 

Rozumiem, jednak ciężko jest odpowiedzieć na to pytanie przy takim poziomie wiedzy autora. Lepiej po prostu chyba podać dobrą odpowiedź i skierować go do nauki.

 

Zawsze mozna zrobić kilka vectorow w vectorze. Wtedy mogą mieć rożne typy. Popraw mnie jeśli bzdury pisze :D

 

Nie. Wszystkie elementy będą musiały mieć ten sam typ.

vector<vector<vector<int>>>

Bo vector musi zawierać tablicę obiektów tego samego typu, więc nie może zawierać jednocześnie vectora<int> i vectora<float>

 

Jedyne co można zrobić żeby to osiągnąć (pomijając strukturę/klasę) to tuple, jednak odradzam używania go jeśli nie jest to konieczne.

Opublikowano

Masz racje. Dawno nie korzystałem z C++ (teraz WEB) a tym bardziej z vectorow. Jak z nich korzystałem to tylko z pojedynczego (vector<int>tab). Dobra, nie offtopujmy. Dopóki autor nie odpisze nic nie wskorany

3587513.png


Potrzebujesz pomocy? Pisz śmiało na PW/Skype/Gadu-Gadu!


(albo napisz na forum... ^.^)

Opublikowano

String tab[ilosc kont][2]

 

tab[nr konta][0] - login

tab[nr konta][1] - haslo

Tylko jak ja mam pobrać nr konta potem? z loginu który wpisze skoro login jest szukany na podstawie nr konta, jak zrobię pętle for do znalezienia takiego samego wyniku w login to będzie szukał tego a program znacznie zwolni chyba, nie doszedłem do tematów vectorów jeszcze, myślałem raczej o tym czy da się stworzyc zmienną z value zmiennej, coś jakby zmienna.getvalue = "costam".

 

Sopelek997,

Podajesz mi jakiś przykład z dupy, mówisz że nie znam podstaw a sam podajesz mi jakiś przykład który domyśla się jaki login ma użytkownik

auto account = accounts.find(login);

Tutaj szuka tego konta, jest to w tablicy a Ty wpisałeś tu login, czyli stringa, jak ma to działać bo nie rozumiem, jak nie stringa a inta to skąd ma wiedzieć jaki int?

Opublikowano

Tylko jak ja mam pobrać nr konta potem? z loginu który wpisze skoro login jest szukany na podstawie nr konta, jak zrobię pętle for do znalezienia takiego samego wyniku w login to będzie szukał tego a program znacznie zwolni chyba, nie doszedłem do tematów vectorów jeszcze, myślałem raczej o tym czy da się stworzyc zmienną z value zmiennej, coś jakby zmienna.getvalue = "costam".

 

Sopelek997,

Podajesz mi jakiś przykład z dupy, mówisz że nie znam podstaw a sam podajesz mi jakiś przykład który domyśla się jaki login ma użytkownik

auto account = accounts.find(login);

Tutaj szuka tego konta, jest to w tablicy a Ty wpisałeś tu login, czyli stringa, jak ma to działać bo nie rozumiem, jak nie stringa a inta to skąd ma wiedzieć jaki int?

"auto" czyli nie musisz podawać typu danych, kompilator to za Ciebie zrobi (nie musisz pisać int, string, etc.)

"account" - nazwa zmiennej

 

"accounts.find(login);

if(account != accounts.end() && account.password == password)

{

   //dane poprawne

}"

przeszukuje kontener(czyt : mape) i sprawdza czy hasło danego konta(które jest zawarte w strukturze, a ta struktura jest jednym z elementów mapy). Nie wiesz co to mapa? Google nie boli!

 

@Do pytania wyżej: Tablice to nie tylko jedno i dwuwymiarowe. Można tworzyć więcej niż 2wymiarowe (czyt: wielowymiarowe)

Opublikowano

Sopelek997,

Podajesz mi jakiś przykład z dupy, mówisz że nie znam podstaw a sam podajesz mi jakiś przykład który domyśla się jaki login ma użytkownik

auto account = accounts.find(login);

Tutaj szuka tego konta, jest to w tablicy a Ty wpisałeś tu login, czyli stringa, jak ma to działać bo nie rozumiem, jak nie stringa a inta to skąd ma wiedzieć jaki int?

 

Kiedyś zrozumiesz.

Wszystko rozchodzi się o to, że musisz się jeszcze poduczyć, żeby takie rzeczy dobrze pisać.

 

 

i powinno być

account->second.password == password

w moim kodzie.

Walnąłem się.

Opublikowano

"auto" doszło w c++11?

Nie jestem trochę w temacie.

3587513.png


Potrzebujesz pomocy? Pisz śmiało na PW/Skype/Gadu-Gadu!


(albo napisz na forum... ^.^)

Opublikowano

auto było, ale zmieniło znaczenie (nie wiem co kiedyś znaczyło), w c++11.

Równie dobrze można to zapisać tak:

 

 

if(accounts.find(login) != accounts.end())
{
}
Opublikowano

Średnio, bo nie tylko tam z tego korzystam.

 

#Edit down

to ja tylko jeszcze dodam, że jak ktoś ma to co wyżej, i chce w innym miejscu wyciągnąć tą samą daną z mapy (czy z czegokolwiek) to niech nie używa find/operator[] po raz kolejny.

Opublikowano

W tym przypadku, akurat by utrudniło robotę, ale tylko mówię, że nie zawsze trzeba tworzyć iterator. Może komuś się przyda taka informacja.

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...