wczytywanie calej lini tekstu do zmiennej.

0

Witam!
Mam problem ze wczytaniem calej lini znakow do zmiennej. Szukałem w internecie i znalazlem funkcje cin.get() oraz funkcje cin.getline(). Problem w tym ze wszedzie pisza ze moge linie wczytac do tablicy charow. Natomiast ja chcialbym wczytac kilka lini tekstu do tablicy stringow. Np:

string sPersonalia[2];
Jan Kowalski -> wczytuje do -> sPersonalia[0]
Janina Kowalska -> wczytuje do -> sPersonalia[1]

mniej wiecej tak to ma wygladac.
Jestem poczatkujacy wiec prosze o pomoc z moim problemem.
Prosze o pomoc.

0

Dzięki, pomogło;) ale pojawił się kolejny problem. Aby nie zakladac nowego tematu napisze tutaj bo dotyczy tego samego programu.
Wczytalem juz sobie kilka lini tekstu do tablicy string. Linie tekstu wygladaja mniej wiecej tak:
12 345
23 121
11 224
teraz chce np pierwsza linie z tablicy rozłożyc na dwie liczby i rzutowac je na typ int, aby moc pozniej wykonywac na nich dzialania.
Zrobilem tak:

std::string sGr1(sDane[0], 0, 2); // do zmiennej pomocniczej sGr1 wyciagam dwa pierwsze znaki ze zmiennej z tekstem w tablicy
iGr1 = atoi(sGr1.c_str()); // rzutuje te dwa znaki na int do zmiennej iGr1
na razie wszystko dziala.

Ale gdy chce wyciagnac druga liczbe tym samym sposobem:

std::string sGr2(sDane[0], 3, 3);
iGr2 = atoi(sGr2.c_str());
Nie działa:( program sie kompiluje ale chwile po uruchomieniu wyskakuje jakis błąd. Nie pamietam jaki bo pisze teraz z nie swojego kompa.
Linie tekstu zawsze maja taka sama forme, czyli liczba dwucyfrowa i trzycyfrowa oddzielone spacja.
Proszę o pomoc. Nie wiem co zle robie. A moze jest jakis inny sposob aby z takiego lancucha znakow wyciagnac te dwie liczby do zmiennych int?

0

Akurat w Twoim przypadku robienie pomocniczego stringa który będzie trafiać do atoi() nie jest konieczne, ponieważ ww. funkcja kończy interpretację po znalezieniu białego znaku.
Drugą liczbę możesz uzyskać szukając w napisie spacji przy użyciu strchr() a następnie przekazując otrzymany wskaźnik do kolejnego atoi().

0

Jeżeli chodzi o liczby, to po co Ci w ogóle jakaś tablica stringów. std::vector<int>, std::copy, std::istream_iterator<int>, std::back_inserter<std::vector<int>>. Takie rzeczy są Ci potrzebne. Nie wiem co dokładnie chcesz zrobić i jaki jest układ tego wejścia, ale może to okaże się pomocne:

#include <iostream>
#include <algorithm>
#include <iterator>
#include <vector>
#include <cassert>
 
using namespace std;
 
int main() {
 
  typedef int Number;
  typedef std::vector<Number> Vector;
 
  Vector numbers;
 
  copy(istream_iterator<Number>(cin),
       istream_iterator<Number>(),
       back_inserter<Vector>(numbers));
 
  // np. sumy w wierszu:
 
  assert(numbers.size() % 2 == 0);
 
  for (size_t i = 0; i < numbers.size(); i += 2) {
    cout << numbers[i] + numbers[i+1] << endl;
  }
        
  return 0;
}

http://ideone.com/G7k0P

W żadnym wypadku nie mówię, że to jest rozwiązanie Twojego problemu. Chcę tylko zwrócić uwagę, że być może nadmierne kombinowanie nie jest Ci potrzebne.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.