Wątek przeniesiony 2018-08-19 12:08 z C/C++ przez kq.

Konwertowanie string [ ] na int [ ]

0

Witam, znalazłem na innym forum taką odpowiedź:

Rozumiem że masz 2 tablice

string text_liczby[100];
int bin_liczby[100];

i musisz przekonwertować je. Wystarczy po prostu użyć w pętli atoi(); stringstream()

Tyle, że wciąż nie rozumiem jak to zrobić. Proszę o pomoc.

0

A jakie masz pytanie? Czy mamy odpowiedzieć na to, co zrozumiał użytkownik innego forum?

0

Konwersja string na int: strtol(obiektString.c_str(), NULL, 10 <- podstawa systemu liczbowego)

0
kq napisał(a):

A jakie masz pytanie? Czy mamy odpowiedzieć na to, co zrozumiał użytkownik innego forum?

Jak przekonwertować string napis="12345"; do int cyfry[10]; przy użyciu pętli, w której umiesczę fukncje atoi() i funkcje stringstream ss(); ???

A w skrócie chce napis="12345" przekowertować do int cyfry[10] tak aby każda komórka string napis była odzielona i zapisana kolejno w komórkach int cyfry[10].

0

Na przyszłość: https://dsp.krzaq.cc/post/445/jak-zadawac-pytania-na-forum/

string napis = "12345";
int cyfry[10];
for(size_t i = 0; i < napis.length(); ++i) {
    cyfry[i] = napis[i] - '0';
}

albo z std::vector

string napis = "12345";
vector<int> cyfry;
for(char c : napis) {
    cyfry.push_back(c - '0');
}

Wtedy nie musisz się martwić liczbą wczytanych cyfr.

0
string napis = "12345";
int cyfry[10];
for(size_t i = 0; i < napis.length(); ++i) {
    cyfry[i] = napis[i] - '0';
}

Ciekawi mnie co w funkcjonowaniu tego programu zmienia użycie w pętli "size_t i=0" zamiast zwyczajnego "int i=0", i dlaczego program akceptuje wkładanie do int'a komórki string'a - '0' ???

0

co w funkcjonowaniu tego programu zmienia użycie w pętli "size_t i=0" zamiast zwyczajnego "int i=0"

string::length zwraca size_t, więc nie porównujesz zmiennych różnych typów.

dlaczego program akceptuje wkładanie do int'a komórki string'a - '0' ???

Bo napisy to tablice znaków o określonych wartościach w różnych systemach kodowania. Np. w ASCII 0 ma wartość 48 (3016), a kolejne cyfry mają kolejne wartości. Dlatego odjęcie od wartości znaku-cyfry wartości zera daje liczbę reprezentowaną przez tę cyfrę.

1

Kol @golon300 czytałeś choć kilka kartek ksiązki o C, C++

jest niemożliwe tutaj przepisywac ksiazki.

Nie stringa, tylko jednej z 'komórek' stringa .... zagadnij co to jest ... minus zero

0

Nie czytałem jeszcze książek o żadnym z języków. Uczę się programowania od podstaw od 2 tygodni więc przepraszam i proszę o wyrozumiałość ;)

0

W takim razie zapraszam do przeczytania jakiejś, np. Stroustrupa.

0
golon300 napisał(a):

Nie czytałem jeszcze książek o żadnym z języków. Uczę się programowania od podstaw od 2 tygodni więc przepraszam i proszę o wyrozumiałość ;)

pytanie z jakim tu wpadłeś jest ni przypiął, ni przyłatał.

Jesteś ZMUSZONY do rozwiązania akurat takiego zagadnienia? Szkoła? Rekrutacja?

0
kq napisał(a):

co w funkcjonowaniu tego programu zmienia użycie w pętli "size_t i=0" zamiast zwyczajnego "int i=0"

string::length zwraca size_t, więc nie porównujesz zmiennych różnych typów.

dlaczego program akceptuje wkładanie do int'a komórki string'a - '0' ???

Bo napisy to tablice znaków o określonych wartościach w różnych systemach kodowania. Np. w ASCII 0 ma wartość 48 (3016), a kolejne cyfry mają kolejne wartości. Dlatego odjęcie od wartości znaku-cyfry wartości zera daje liczbę reprezentowaną przez tę cyfrę.

Więc to nie jest konwertowanie funkcją a prostym obliczeniem :D

Zadanie ze SPOJ'a. Jestem zmuszony przez siebie, chcę zdobywać wiedzę i umiejętności.

Dziękuję za pomoc.

3

No to jak chcesz się uczyć (no i fajnie) to podpowiem, że można to ogarnąć też jednolinijkowcem:

#include <string>
#include <vector>
#include <algorithm>

int main()
{
    const auto str = std::string{ "12345" };
    std::vector<size_t> result;

    std::transform(std::cbegin(str), std::cend(str),
                   std::back_inserter(result),
                   [](const auto c)
                   {
                       return c - '0';
                   });
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1