[C++/WinApi] wypelnianie tablicy liczbami z podanego zakresu

0

Witam,

mam problem z pomysłem na pewien sposób wczytywania liczb z pola tekstowego do tablicy.
Otóż chciałem zrealizować to tak, aby użytkownik mógł podać pojedyncze liczby i pewien zakres/zakresy, podobanie jak to ma miejsce przy wyborze drukowania stron.

np: 1,3,15-17,20-23
Użytkownik wpisuje powyższy tekst do pola tekstowego, a program wypełnia tablicę następującymi liczbami 1,3,15,16,17,20,21,22,23.

Początkowo planowałem zrobi to analizując w pętli kolejne elementy stringa tzn, sprawdzam czy dany element jest liczbą (funkcja isdigit), następnie sprawdzam czy element obok jest liczbą, jeśli tak, to sprawdzam kolejny element (działać ma to do 3-cyfrowych liczb). Jeśli nie, to sprawdzam, czy jest przecinek - jeśli tak, to wpisuje te dwie stojące cyfry do tablicy, natomiast jeśli jest myślnik, to sprawdzam ile cyfr ma liczba za myślnikiem, odejmuje druga od pierwszej i mam zakres liczb, i po kolei dodaje począwszy od pierwszej do ostatniej i zapisuje je w kolejnych komórkach tablicy.

No i mam problem, bowiem o ile pojedyncze liczby nie stanowią problemu, to mam trudność z liczbami z zakresu. Utworzyłem tablice stringów, i program wysypuje się na probie dodania do stringa 1.
Nie pasuje mu ten fragmenttab[j]=tekst.substr(i,2)+1;
Oczywiście problemem jest konwersja liczb ,do stringa probuje dodać int.

Chciałem to rozwiązać w ten sposóbstring a=tekst[1]+(char*)1; ale wówczas, kompilator uruchamia program, po czym następuje wywalenie się Visual Studio Debbugera.

Może ma ktoś inny pomysł na rozwiązanie powyższego problemu ogólnie, jako samej metody, ewentualnie, co zrobić, żeby powyższy fragment kodu nie sprawiał już problemów. Z góry dziękuję za wszelką pomoc :-)

0

musisz troche doczytac na temat typow, ukladu rzeczy w pamieci, wskanzikow..

(char*)1 oznacza adres 0x00000001 wskazujacy na zmienna/tablice typu char. oczywiste jest, ze pod tym adresem beda conajwyzej smieci i ze operacja teskt+tocos nie bedzie zachowywala sie z Twoim zamierzeniem..

NIE DA SIE wprost powiekszysc liczby zapisanej we stringu o oczko. to nie PHP gdzie runtime sobie wykrywa ze napis zawiera liczbe i po cichu ja konwertuje w te i we wte

aby osiagnac to co chesz, MUSISZ ten napis recznie skonwertowac na liczbe, zapamietac ja jako liczbe, na tej liczbie wykonywac operacje i tam gdzie trzeba wynik operacji skonwertowac na napis i ten napis dalej uzywac..
Idea:

for ....
{
  ...
  string tmp = tekst.substr(i,2);
  int liczba = ...konwertujnaint(tmp)
  for(....
  {
     ++liczba;
     string drugitmp = ...konwertujnastring(liczba)
     tab[..] = drugitmp
  }
  ..
}

konkrety uzupelnij sam

0

Dziękuję pięknie za pomoc :-)

ostatecznie uwzględniając moje potrzeby:

int str2int(string dane, int pocz, int kon)
{
    string temp=dane.substr(pocz,kon);
    int liczba=strtol(temp.c_str(), NULL, 10);
    return liczba;
}

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