У меня есть файл, который сначала сообщает мне, сколько точек я буду читать в следующей строке. Итак, например, мой файл выглядит так:
7
a,b c,d e,f g,h, i,j k,l m,n
Итак, я знаю, что следующая строка после 7 - это 7 пар целых чисел, разделенных запятой, и каждая пара разделена пробелом.
Что я хочу: иметь вектор из 7 элементов Point.
У меня есть класс Point:
class Point {
public:
int x;
int y;
bool operator==(const Point q){
return (q.x == this->x && q.y == this->y);
}
};
Поэтому, когда я читаю этот файл, я хотел бы иметь вектор V, где:
V[0].x = a
V[0].y = b
V[1].x = c
V[1].y = d
и так далее.
Я могу прочитать 7 в порядке, но как мне прочитать каждую из 7 пар целых чисел по отдельности? Мне это нужно, потому что я собираюсь хранить (a,b) (c,d)... в векторе.
Есть не только 2 балла. Первая строка файла сообщает мне, сколько точек я собираюсь сохранить.
Они не читаются из стандартного ввода.
Они читаются из файла.
Я пытался использовать sscanf, но я думаю, что это только для тех случаев, когда у вас есть несколько строк с этой информацией, и я не хотел бы изменять свой формат.
Это то, что у меня есть до сих пор:
void process_file(string filename){
ifstream thracklefile;
string line;
int set_size;
thracklefile.open(filename);
getline(thracklefile,line); //store set size.
set_size = stoi(line);
//Store points in following line
points.clear();
points.resize(set_size);
getline(thracklefile,line); //store the points.
}
Я не хочу игнорировать запятые, каждая запятая является частью информации, которую я хочу сохранить для каждой точки.
char comma; for (int i = 0; i < set_size; ++i) thracklefile >> V[i].x >> comma >> V[i].y;
- person NathanOliver   schedule 15.01.2019line
, которая является строкой. Могу ли я сделать это со строками тоже? - person David Merinos   schedule 15.01.2019std::getline(thracklefile, line); std::istringstream ss(line); char comma; int x, y; while( ss >> x >> comma >> y ) { ... }
- person Ted Lyngmo   schedule 15.01.2019