• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Działania matematyczne na stringach

0 głosów
1,791 wizyt
pytanie zadane 26 grudnia 2017 w C i C++ przez DeMS Nowicjusz (150 p.)

Witam. Mam problem z działaniami matematycznymi na stringach.

KOD

(Program nie jest jeszcze całkowicie skończony).

Problem można zauważyć już w linijce 38/39. Jeśli podamy pesel to program zgodnie z
cout<<pesel[0]<<endl; wyświetli wpisaną wartość, lecz gdy ma zrobić a=10* pesel[0]; pobiera dane liczby z tablicy ASCII i wtedy wykonuje działanie matematyczne. Nie wiem czy gdzieś popełniłem błąd czy może taki urok stringów, o którym nie wiedziałem.

Byłbym wdzięczny, gdyby ktoś mógł mi to wytłumaczyć i ewentualnie nakierować na odpowiednie tory :)

2 odpowiedzi

+1 głos
odpowiedź 26 grudnia 2017 przez Sebastian Fojcik Nałogowiec (43,040 p.)
wybrane 26 grudnia 2017 przez DeMS
 
Najlepsza

Jest dokładnie tak jak piszesz. pesel[0] to nie jest pierwsza cyfra peselu, tylko kod znaku tej cyfry w ASCII. Aby wykonać poprawne mnożenie musisz użyć takiej sztuczki: 

string str = "2";
int n = 4*str[0] // tutaj jest 4*50, bo kod cyfry '2' w ASCII to 50

n = 4*(str[0]-'0'); // tutaj jest 4*2, czyli OK. 

Aby zrozumieć dlaczego to działa musiałbyś popatrzeć na kod cyfry '2' oraz cyfry '0' w ASCII. Odejmij od siebie kody tych znaków i zobacz co otrzymasz ;-)

komentarz 26 grudnia 2017 przez DeMS Nowicjusz (150 p.)
No tak. Przeglądałem tablicę ASCII ale nie pomyślałem nad tym trikiem. Proste i sprytne. Dziękuję bardzo :)
0 głosów
odpowiedź 26 grudnia 2017 przez SQnera Początkujący (280 p.)
Z tego co się orientuję to musisz urzyc funkcji stoi() (string to int), bardzo łatwo znajdziesz o niej informację w internecie. Inaczej kompilator przez domniemanie pobierze liczbowe wartość liter z ASCI a nie o to chodź.
komentarz 26 grudnia 2017 przez DeMS Nowicjusz (150 p.)
Już wcześniej próbowałem tej metody niestety bezskutecznie. Jednak błąd wynikał z mojej winy, ponieważ próbowałem użyć stoi na całą liczbę pesel, a to było po prostu za dużo. Jednak funkcja spełnia swoje zadanie jako konwerter dnia, roku i miesiąca w moim programie. Dziękuję bardzo :)

Podobne pytania

0 głosów
4 odpowiedzi 2,573 wizyt
pytanie zadane 15 grudnia 2017 w C i C++ przez n0s1gnal Użytkownik (700 p.)
0 głosów
0 odpowiedzi 196 wizyt
pytanie zadane 27 grudnia 2019 w C i C++ przez amtrax Dyskutant (9,630 p.)
0 głosów
0 odpowiedzi 805 wizyt
pytanie zadane 28 października 2016 w Rozwój zawodowy, nauka, praca przez Roksana Nowicjusz (120 p.)

93,776 zapytań

142,736 odpowiedzi

323,388 komentarzy

63,381 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...