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
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.
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
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.
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.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.