Kilka zmiennych w jednej linii tekstu

0

Witam.
Mam plik txt z przykładowymi danymi:
56 728 90 97 534 67 90 567 999 44 6655
Każda liczba oddzielona jest od kolejnej spacją. Pobrałem te dane do programu funkcją getline jednak nie wiem jak je rozdzielić. Myślałem jakoś do tablicy:
tab[0]=56
tab[1]=728
tab[2]=90
itd.
Czy ktoś pomógłby mi porozdzielać te zmienne?
Z góry dzięki.
Pozdrawiam

0

http://stackoverflow.com/questions/236129/split-a-string-in-c

std::vector<std::string> split(const std::string &text, char sep) {
  std::vector<std::string> tokens;
  std::size_t start = 0, end = 0;
  while ((end = text.find(sep, start)) != std::string::npos) {
    tokens.push_back(text.substr(start, end - start));
    start = end + 1;
  }
  tokens.push_back(text.substr(start));
  return tokens;
}

Może tak?
Jako sep daj ' '.

1

Tak dla odróżnienia, jeśli wiesz, że dane to inty to możesz ładować od razu do vectora intów. A separować, chociażby za pomocą strumieni.

#include <iostream>
#include <sstream>
#include <string>
#include <vector>


void add_data(std::istream& input, std::vector<int>& output) {
    std::string line;
    std::getline(input, line);
    std::stringstream ss(line);
    int i = 0;
    while (ss >> i) {
        output.push_back(i);
    }
}

int main() {
    std::stringstream input("56 728 90 97 534 67 90 567 999 44 6655");
    std::vector<int> output;
    add_data(input, output);
    //add_data(std::cin, output);
    
    for (auto& i: output) {
        std::cout << i << " ";
    }
    std::cout << "\n";
    
    return 0;
}
2

Można użyć bezpośrednio operator strumienia >>.

std::vector<int> values;
int value;
while (plik >> value) {
    values.push_back(value);
} 
1
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <sstream>
#include <iterator>
using namespace std;

template<typename T>
auto split(string const &line) {
	vector<T> result;
	stringstream ss;
	ss << line;
	copy(istream_iterator<T>(ss),
	     istream_iterator<T>(),
	     back_inserter(result));
	return result;
}

int main() {
	string line;
	while(getline(cin, line)) {
		cout << "line: " << line << "\n";
		cout << "ints: " << endl;
		auto ints = split<int>(line);
		for(auto i = 0u; i < ints.size(); ++i) {
			cout << "ints[" << i << "] = " << ints[i] << ";\n";
		}
		cout << "\n\n";
	}
	return 0;
}

stdin:

1 2 3
4 5 6
7 8 9 10

stdout:

line: 1 2 3
ints: 
ints[0] = 1;
ints[1] = 2;
ints[2] = 3;


line: 4 5 6
ints: 
ints[0] = 4;
ints[1] = 5;
ints[2] = 6;


line: 7 8 9 10
ints: 
ints[0] = 7;
ints[1] = 8;
ints[2] = 9;
ints[3] = 10;

link: http://ideone.com/ZmRpVb

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