Вывести вектор координат, полученных из текстового файла в определенном формате в Stack Overflow

Вот код, над которым я работаю:

#include <iostream>
#include <algorithm>
#include <vector>
#include <fstream>
#include <iterator>

using namespace std;

struct coord {
long x,y;
};

int main()
{
ifstream nos("numbers.txt");
vector< long > values;
double val;
while ( nos >> val )
{
values.push_back(val);
}

copy(values.begin(), values.end(), ostream_iterator<double>(cout, "\n" ));
return 0;

}

Я понимаю начальный структура здесь не нужно, но я хочу использовать это. Я хочу, чтобы мой входной текстовый файл был примерно таким —

1,2
2,3
4,5

Затем я использую свою программу, чтобы ввести эти цифры в вектор и распечатать этот вектор в том же формате

Может кто-нибудь сказать мне, как это правильно сделать?

Я сослался на следующий для кода, но мне нужно прочитать и распечатать в формате, указанном выше, и я не уверен, что лучший способ продолжить.

Для большей ясности — я пытаюсь реализовать алгоритм выпуклой оболочки. Я одновременно пытаюсь стать лучше в программировании и, следовательно, такой скачок.

0

Решение

Вопрос: Почему ты смешиваешь double а также long? Я предполагаю, что вы хотите использовать long по всему коду. Самый простой способ сделать то, что вы хотите, это добавить фиктивную переменную, которая читает , между числами:

int main()
{
ifstream nos("numbers.txt");
vector< long > values;
long val1, val2;
char dummy;
while ( nos >> val1 >> dummy >> val2)
{
values.push_back(val1);
values.push_back(val2);
}

copy(values.begin(), values.end(), ostream_iterator<long>(cout, "\n" ));
}

Кроме того, вы определили структуру с именем coord, но вы не используете его в коде. Если вы хотите использовать это, вы можете использовать следующий код:

std::ostream& operator<<(std::ostream& os, const coord& c)
{
os << c.x << " " << c.y;
return os;
}

int main()
{
ifstream nos("numbers.txt");
vector< coord > values;
coord c;
char dummy;
while ( nos >> c.x >> dummy >> c.y )
{
values.push_back(c);
}

copy(values.begin(), values.end(), ostream_iterator<coord>(cout, "\n" ));
}

Кроме того, в C ++ 11 вы можете изменить код на:

long x, y;
char dummy;
while ( nos >> x >> dummy >> y )
{
values.emplace_back(coord{x, y});
}

Или вы также можете посмотреть в std::pair<long, long> для размещения ваших координат в.

0

Другие решения

Это может быть немного излишним для чего-то такого простого, но я бы перегрузил операторы вывода и ввода ostream и istream соответственно.

РЕДАКТИРОВАТЬ: я думаю, так как структура имеет общедоступные переменные по умолчанию, вам не нужен класс друга, но я буду держать его, так как это обычная практика для перегрузки << и >>

struct coord {
long x,y;

friend class ostream;
friend class istream;
};

istream& operator>>( istream& is, coord& c )
{
char comma;
return is >> c.x >> comma >> c.y;
}

ostream& operator<<( ostream& os, const coord& c )
{
char comma = ',';
return os << c.x << comma << c.y;
}

int main()
{
ifstream nos("numbers.txt");
vector< coord > values;

coord val;
while ( nos >> val )
values.push_back(val);

for each( value : values )
cout << value << endl;

return 0;
}
0

По вопросам рекламы [email protected]