Итак, у меня много строк, которые выглядят так:
!,3,1,10,27,13,078,43,05,31,307,48,16,24,042,43,02,10,267,43
!,3,2,10,26,03,031,36,07,75,215,51,09,57,121,53,30,40,234,50
!,3,3,10,23,29,117,46,04,36,114,46
!,3,1,10,27,13,078,43,05,31,307,48,16,24,042,43,02,10,267,43
!,3,2,10,26,03,031,36,07,75,215,51,09,57,121,53,30,40,234,50
!,3,3,10,23,29,117,46,04,36,114,46
Мне нужно вывести некоторые значения из строки после определенного количества запятых. Но только если они появляются впервые. Известно, что число значений меньше 100. Я справился с той частью кода, которая выводит значения из строки, но я не могу справиться со второй частью задачи. Я создал массив из 100 элементов, выполнил поиск с помощью команды std :: find и добавил значение, если оно отсутствует в массиве, но вывод программы неверен. Также мне нужно решить эту задачу без использования векторов: /
Я пробовал это так:
#include <iostream>
#include <string>
#include <fstream>
int main() {
int k;
std::string line;
std::ifstream logs_("C:/Users/Ivan/Desktop/gpgga.txt");
std::ofstream pout("C:/Users/Ivan/Desktop/outLOG.txt");
int num = 100;
int* Memory = new int[num];
bool ExitFlag;
if (logs_.is_open()) {
while (getline(logs_, line)) {
k = 0;
for (size_t i = 0, N = 4; i < line.size(); i++) {
if (line[i] == ',') k++;
if (k == N) {
N += 4;
for (int f = 0; f < num; f++) {
if (Memory[f] != stoi(line.substr(i + 1, 2))) {
ExitFlag = false;
Memory[f] = stoi(line.substr(i + 1, 2));
}
}
if (ExitFlag == false) {
pout << "Satellite name: " << line.substr(i + 1, 2) << std::endl;
}
}
}
logs_.close();
std::cout << "Success" << std::endl;
}
}
else std::cout << "File is not open" << '\n';
pout.close();
return 0;
}
Но ничего не выводится
Вот еще одна попытка:
#include <iostream>
#include <string>
#include <fstream>
int main() {
int k;
std::string line;
std::ifstream logs_("C:/Users/Ivan/Desktop/gpgga.txt");
std::ofstream pout("C:/Users/Ivan/Desktop/outLOG.txt");
int array[100];
int size = sizeof(array) / sizeof(array[0]);
if (logs_.is_open()) {
while (getline(logs_, line)) {
k = 0;
for (size_t i = 0, N = 4; i < line.size(); i++) {
if (line[i] == ',') k++;
if (k == N) {
for (int j = 0; j < size; j++) {
int* foo = std::find(std::begin(array), std::end(array), stoi(line.substr(i + 1, 2)));
if (foo = std::end(array)) {
pout << "Number: " << line.substr(i + 1, 2) << " ";
array[j] = stoi(line.substr(i + 1, 2));
}
}
N += 4;
}
}
logs_.close();
std::cout << "Success" << std::endl;
}
}
else std::cout << "File is not open" << '\n';
pout.close();
return 0;
}
В теории программа должна выводить 27, 05, 16, 02, 26, 07, 09, 30, 23, 04
Токовый выход: Номер: 27 Номер: 27 Номер: 27 Номер: 27 Номер: 27 ... 100 раз Номер: 05 Номер: 05 Номер: 05 Номер: 05 Номер: 05 Номер: 05 Номер: 05 Номер: 05 ... 100 раз и они повторяются