Wiem że jest sporo podobnych tematów w internecie ale dotyczą one programowania w konsoli , a mi wielki problem sprawia przesiadka z konsoli na GUI (prawdę mówiąc z konsolą też nie najlepiej mi idzie).
Muszę napisać w Visual C++ w GUI program który na podstawie numeru seryjnego jakiegoś tam elementu poda informacje o nim.
Mój problem polega na tym że nie wiem jak skonwertować numer wpisany do textBoxa na tablicę liczb ( wydaje mi się że to jest najłatwiejsze rozwiązanie) i jak podzielić go później na kilka kilku(2-4)cyfrowych części które będą analizowane oddzielnie przez rożne funkcje w programie.
Bardzo proszę o pomoc gdyż jest to dla mnie bardzo ważne.
i , stwórz stringa, do którego zapiszesz wersję tekstową numeru z textBoxa, za pomocą metody at(int) obiektu string wybierasz poszczególne znaki ciągu i za pomocą operatora << przekierowujesz je do obiektu stringstream (jego deklaracja znajduje się w nagłówku ). Następnie z obiektu typu stringstream operatorem >> przekierowujesz dane do zmiennej typu int. W ten sposób otrzymujesz liczbę typu int stworzoną ze zwykłego tekstu typu const char*.
W praktyce
string liczbaTekst (L"nie znam WinAPI(??), nie wiem jak wydobyć stałą tekstową z textBoxa");
stringstream strumien;
strumien << liczbaTekst.at(0) << liczbaTekst.at(1) .......itd.;
int kodCzescPierwsza;
strumien >> kodCzescPierwsza;
strumien.empty();
Do podzielenia liczby w formacie tekstowym możesz zastosować algorytmy z biblioteki standardowej + iteratory. Proste, ale trzeba umieć, ale niestety nie wiem jaki twój kod liczbowy ma format, stały, czy zmienny. Jeśli stały typu 1234-1234-1234-234-23 to wystarczy zwykłe at(i). Hmmm, właściwie jeśli poszczególne człony oddzielone są znakiem, np. “-”, to można by przejechać po takim stringu w pętli zamiast używać iteratorów i algorytmów.
Z nagłówkami miałem na myśli to, że włączasz je do swojego projektu, czyli
#include
#include
using std::string;
using std::stringstream;
// const char* napisZTextBoxa
// napis z textBoxa jest teraz w stringu w postaci tekstu
string napisTekst(napisZTextBoxa);
stringstream strumien;
int tablicaKodow[4]
if(napisTekst.size() == 12)
{
strumien << napisTekst.at(0) << napisTekst.at(1);
strumien >> tablicaKodow[0];
//(...) dalej analogicznie
}
To wszystko, walidację danych wpisanych przez użytkownika wymyśl sam.
string number="011996801390";
int seria = stoi(number.substr(0, 2));
int rok = stoi(number.substr(2, 4));
int typ = stoi(number.substr(6, 2));
int pojemnosc = stoi(number.substr(8, 4));
lub jeśli twój kompilator nie obsługuje C++11
string number="011996801390";
int seria = atoi(number.substr(0, 2).c_str());
int rok = atoi(number.substr(2, 4).c_str());
int typ = atoi(number.substr(6, 2).c_str());
int pojemnosc = atoi(number.substr(8, 4).c_str());
atoi jest w nagłówku (lub jak kto woli); std::stoi w .