Имеется программа для разбиения строки по регулярному выражению (парсинг). Программа читает строку из файла, разбивает по ";", вписывает в вектор типа структура и выводит на экран. Проблема в том, что программа почему-то дважды записывает одно и то же. Как я могу решить свою проблему? Спасибо. Код и скрины прилагаются.
#include "pch.h"
#include <iostream>
#include <vector>
#include <string.h>
#include <io.h>
using namespace std;
struct pointXY
{
char *x;
char *y;
};
pointXY *dot;
int main()
{
dot = new pointXY;
FILE *file;
fopen_s(&file, "poly.txt", "r");
if (file!=NULL)
{
int count = 0;
long sz;
fseek(file, 0, SEEK_END);
sz = ftell(file)+1;
fseek(file, 0, SEEK_SET);
char *read, *pars;
read = new char[sz];
fgets(read, sz, file);
pars = strtok(read, ";");
vector<pointXY> pole;
while (pars != NULL)
{
if (count % 2 == 0)
{
dot->x = pars;
pole.push_back(*dot);
}
else
{
dot->y = pars;
pole.push_back(*dot);
}
pars = strtok(NULL, ";");
count++;
}
for (int i = 0; i < count/2; i++)
{
cout << pole[i].x << " -- " << pole[i+1].y << endl;
}
}
else
{
cout << "Open Error";
}
}
Это можно сделать проще. Например:
using namespace std;
ifstream file("poly.txt");
vector<string> vs;
string s;
while (getline(file, s, ';'))
vs.push_back(s);
for (int i = 1; i < vs.size(); i += 2)
cout << vs[i - 1] << " -- " << vs[i] << endl;
Ваш странный цикл чтения создает в памяти вектор таких пар
{ 0, мусор }
{ 0, 1 }
{ 2, 1 }
{ 2, 3 }
{ 4, 3 }
{ 4, 5 }
{ 6, 5 }
{ 6, 7 }
{ 8, 7 }
{ 8, 9 }
После чего вы выводите первые пять по [странному] диагональному правилу pole[i].x -- pole[i+1].y
. (Видимо странность вывода должна компенсировать странность чтения.)
Получается то, что получается. Что написали, то и получили.
Зачем понадобился такой странный цикл чтения и странный вектор в результате - не ясно. Но чтобы из него "выцарапать" пары исходных "координат" вашим странным способом вывода (т.е. для того, чтобы странность вывода действительно скомпенсировала странность чтения), вам придется выводить данные с шагом i += 2
, а не i++
. И не до i < count / 2
, а до i < count
.
Но я бы предположил, с точки зрения здравого смысла, что исходный замысел все таки состоял в формировании вектора
{ 0, 1 }
{ 2, 3 }
{ 4, 5 }
{ 6, 7 }
{ 8, 9 }
при чтении. А для этого надо переделывать все.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Имеется класс, полем которого является структура, а один из методов это работа с этой структуройПри инициализации метода ругается на неправильное...
Хочу сделать что-то типа джойстика на андроидеЕсть квадратный тип и круглый тип
Ранее я использовал Java 8 , где была включена JavaFXХочу настроить работу JavaFX 11 используя Eclipse
Всем доброго времени сутокПодскажите пожалуйста, почему у меня могла возникнуть следующая проблема: После того, как было собрано и запущено...