Witam byłby ktoś w stanie wytłumaczyć mi czemu int a przyjmuje wartosc 49 zamiast 1?
int a;
string b="123433";
a= b.at(0);
cout<< a;
Witam byłby ktoś w stanie wytłumaczyć mi czemu int a przyjmuje wartosc 49 zamiast 1?
int a;
string b="123433";
a= b.at(0);
cout<< a;
Bo string to ciąg znaków w kodowaniu ASCII, gdzie '1' == 49. Odejmij sobie od tego '0', żeby otrzymać w czytelny sposób wynik, którego szukasz.
odpowiedzią jest kodowanie, zobacz sobie na tablice: https://pl.m.wikipedia.org/wiki/ASCII
Kod ASCII, tak to jest w większości języków
https://pl.wikipedia.org/wiki/ASCII
Althorion napisał(a):
Bo
stringto ciąg znaków w kodowaniu ASCII, gdzie'1' == 49. Odejmij sobie od tego'0', żeby otrzymać w czytelny sposób wynik, którego szukasz.
Nie za bardzo rozumiem, mógłbyś napisać jak to zrobić żeby rzeczywiście int był równy 1?
Napisałem — odjąć od tej wartości '0'.
Więc jeszcze raz, od początku — string to ciąg znaków w kodowaniu ASCII. Komputer nie trzyma w pamięci litery 'a', znaku kropki '.' czy cyfry '1', bo nie ma nawet jak. Zatem żeby to osiągnąć, zapisuje się te znaki jako liczby, w określonym kodowaniu — tutaj ASCII, do którego link masz wyżej. W nim cyfrze '0' odpowiada liczba 48, cyfrze '1' odpowiada liczba 49 itd.
Zatem jak zrobić z liczby 49 liczbę 1? Najprościej — i najczytelniej — jest odjąć od niej 48, zapisane jako '0' co należy rozumieć jako „wartość ASCII znaku wewnątrz ''”.
Czyli chcesz mieć kod w stylu:
a = b.at(0) - '0';
Althorion napisał(a):
Bo
stringto ciąg znaków w kodowaniu ASCII, gdzie'1' == 49. Odejmij sobie od tego'0', żeby otrzymać w czytelny sposób wynik, którego szukasz.
Odpowiedź tak nieścisła, ze aż nieprawdziwa. std::string zawiera ciąg bajtów w kodowaniu takim jakie używa program.
Standardowo powinno być to kodowanie zgodne z ustawieniami std::locale, które domyślnie jest ustawione na C, które domyślnie używa kodowania ASCII.
C (np. locale systemowe std::locale::global(std::locale{""}))).Swoja drogą problem kodowania znaków jest na tyle niezależny od języka programowania, że to powinna być obowiązkowa lektura.