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

Konwertowanie string do int

Cloud VPS
0 głosów
680 wizyt
pytanie zadane 21 lutego 2019 w C i C++ przez polek122333 Nowicjusz (150 p.)

Cześć, mam taki problem potrzebuje wczytać w konsoli dowolny input z klawiatury, zamienić go na int i zapisać w odpowiedniej szufladce w tablicy. Kod jest w pętli ponieważ liczba tych wczytań  zależy od reszty programu. Próbowałem to osiągnąć także przez użycie cin.fail cin.ignore cin.clear (gdzie input był zapisywane w int) oraz używając atoi. Jednakże zawsze coś nie grało i program nie zachowywał się jak należy w każdej sytuacji bądź się zapętlał lub krzaczył. 

Jeszcze tak definiując na przykładach potrzebuje aby program zapisał następujące przypadki w tablicy jako 50:
50dddd 
50 dddd dddd
ddddd50
ddd50ddd dd dd
dd dd 50 ddd

string inputstring;
int inputint[30];

 for (i=1; i<=poziom;)
 {
         cin >>inputstring;
         inputint[i] = stoi(inputstring,0,0);
         i++;

}

Aktualnie gdy ten fragment mam taki jak załączyłem powyżej, to program przy wprowadzeniu czegokolwiek co nie jest cyfrą, przed cyfrą, wyłącza się. To znaczy "50dddddd" działa, a "dddddd50" już powoduje wysypanie się programu. Używam CodeBlocks. Bardzo proszę o pomoc i z góry dziękuję za wszystkie odpowiedzi. :)

komentarz 21 lutego 2019 przez niezalogowany

stoi rzuca wyjątek, którego nie łapiesz.

komentarz 21 lutego 2019 przez polek122333 Nowicjusz (150 p.)

Mógłbym prosić o wyjaśnienie? Hipcio

komentarz 21 lutego 2019 przez niezalogowany
Wystarczy, że wyszukasz sobie w google czym są wyjątki.
komentarz 21 lutego 2019 przez polek122333 Nowicjusz (150 p.)

Hipcio to znaczy że stoi nie potrafi wykonać takiej operacji, a ja mu nie przewidziałem co ma robić w razie błędu?

komentarz 21 lutego 2019 przez niezalogowany
Tak

1 odpowiedź

+1 głos
odpowiedź 21 lutego 2019 przez Bondrusiek Maniak (61,440 p.)
wybrane 21 lutego 2019 przez polek122333
 
Najlepsza

Witam,

w tym przypadku proponuje zamienić funkcje na pętle która iteruje podany napis i sprawdza czy wartość pojedynczego elementu jest pomiędzy wartościami odpowiadającymi liczbom w tablicy ASCII. Tak na szybko:

    string str = "ddd50ddd dd dd ";
    string subStr;
    int wartosc;
    for(int i = 0; i < str.length() ; ++i)
    {
        if( str[i] >= 48 && str[i] <= 57)
        {
            subStr += str[i];
        }
    }

    cout << stoi(subStr) << endl;

Można oczywiście jeszcze poprawić np. pierwszy element nie powinno 0 lub użyć wyrażeń regularnych itp.

O ASCII

https://pl.wikipedia.org/wiki/ASCII

komentarz 21 lutego 2019 przez j23 Mędrzec (195,240 p.)

Nie 48 i 57 tylko '0' i '9'. Magic numbers to zło. Zresztą jest funkcja isdigit.

komentarz 21 lutego 2019 przez Bondrusiek Maniak (61,440 p.)
W sumie racja. Można i tak.
komentarz 21 lutego 2019 przez polek122333 Nowicjusz (150 p.)

@j23, z tego co przeczytałem w dokumentacji to isdigit pobiera tylko char a ja potrzebuje pobrać dowolną liczbę całkowitą

komentarz 21 lutego 2019 przez j23 Mędrzec (195,240 p.)

Odnosiłem się do kodu @Bondrusiek, gdzie testuje znaki, dlatego wspomniana funkcja ma zastosowanie.

Podobne pytania

0 głosów
2 odpowiedzi 3,566 wizyt
pytanie zadane 1 listopada 2016 w C i C++ przez Stami Gaduła (3,790 p.)
0 głosów
1 odpowiedź 490 wizyt
pytanie zadane 15 sierpnia 2016 w C i C++ przez robertwe Gaduła (4,620 p.)
0 głosów
2 odpowiedzi 1,864 wizyt
pytanie zadane 26 marca 2019 w C i C++ przez Marcinek69 Początkujący (450 p.)

93,460 zapytań

142,454 odpowiedzi

322,724 komentarzy

62,837 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

Kursy INF.02 i INF.03
...