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

[C++]Pobieranie konkretnej liczby z ciągu

VPS Starter Arubacloud
0 głosów
446 wizyt
pytanie zadane 30 października 2017 w C i C++ przez Dorian Bajorek Dyskutant (7,920 p.)
Witam otóż mam taki ciąg liczb: 1234567890 moim zadaniem jest pobranie liczby będącej na 6 miejscu i działanie na niej jako typ int. :)
komentarz 31 października 2017 przez JAKUBW Nałogowiec (33,470 p.)

Możesz podzielić liczbę przez 10^(n-x) gdzie n jest sumą wszystkich wprowadzonych cyfr a x numerem cyfry którą chcesz uzyskać. Następnie zastosować resztę z dzielenia przez 10.

int całość = 123456789;

int cyfra6 = (całość/1000)%10;

Tylko pamiętaj aby działać na intach.

3 odpowiedzi

0 głosów
odpowiedź 30 października 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)
edycja 31 października 2017 przez Eryk Andrzejewski

Wyciągasz liczbę która cię interesuje i konwertujesz ją na typ liczbowy przy pomocy funkcji std::stoi()

std::string text = "123";
int number = std::stoi(text);

 

komentarz 31 października 2017 przez Bondrusiek Maniak (61,440 p.)

Chyba wkradł Ci się błąd.

int text = "123";

Powinno być

string text = "123";

 

komentarz 31 października 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)

Ups, racja. Dzięki smiley

0 głosów
odpowiedź 31 października 2017 przez Bondrusiek Maniak (61,440 p.)

Witam,

wydaje mi się aby wykonać to zadania najlepiej przerobić liczbę na tablice np. napis. Następnie z tego ciągu wyciąć podany element i przekonwertować go do int.

 

#include <iostream>
#include <sstream>

using namespace std;
int main()
{
    //Tu masz liczbe
    int a = 1234567890;
    //Liczbe musisz zamienić na jakąś tablice char (aby móc odwołać się do elementu). Można to wykonać za pomocą strumieni
    stringstream stream;
    stream << a;
    string napis = stream.str();


    //Funkcja substr() wycina napis z podanego stringa. Liczymy elementy napisu od 0 
    //wycinamy tylko 1 cyfrę
    string elementNapis = napis.substr(5,1);

    //Dzieki funkcji stoi zamieniasz string na int
    int liczba = std::stoi(elementNapis);
    cout << "liczba : " << liczba << endl;
    return 0;
}

Może to Ci pomoże:

Strumienie: http://www.cplusplus.com/reference/sstream/stringstream/

substr() : http://www.cplusplus.com/reference/string/string/substr/

stoi() : http://www.cplusplus.com/reference/string/stoi/

0 głosów
odpowiedź 31 października 2017 przez mokrowski Mędrzec (156,260 p.)
edycja 31 października 2017 przez mokrowski

Nieco "hackerskie" i w uzupełnieniu tego co powiedzieli koledzy. Jeśli jesteś absolutnie pewien że w napisie są liczby w reprezentacji ASCII, to tak się składa że 4 najmłodsze bity odzwierciedlają samą liczbę. Stąd maskowanie ich da wartość :-)

#include <iostream>

int main() {
    const char * napis = "1234567890";
    int value = napis[5] & 0x0F;
    std::cout << value << '\n';
}

Niemniej jednak o wiele łatwiej wykonać to z użyciem std::string.

Konsekwencją pracy ze stałą napisową, może być także jej bezpośrednie adresowanie. Tu połączę z maskowaniem widocznym wyżej:

#include <iostream>

int main() {
    std::cout << ("1234567890"[5] & 0x0F) << std::endl;
}

Co ciekawe "w drugą stronę" także działa :-)

#include <iostream>

int main() {
    std::cout << (5["1234567890"] & 0x0F) << std::endl;
}

 

Podobne pytania

0 głosów
0 odpowiedzi 731 wizyt
0 głosów
1 odpowiedź 276 wizyt
0 głosów
1 odpowiedź 622 wizyt
pytanie zadane 26 października 2017 w PHP przez Daniel Śmigiela Nowicjusz (240 p.)

92,973 zapytań

141,938 odpowiedzi

321,177 komentarzy

62,301 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...