Выделить определенную часть строки в текстовом файле и найти 8-ми битную XOR сумму всех символов

77
30 декабря 2021, 12:00

Недавно начала изучать с++, есть задание по обработке текстового файла такого вида:

RE002%%
RE002%%
RE002%%
RE002%%
RE002%%
RE004%on%
$GPGGA,124749.80,5543.3227107,N,03739.1366738,E,1,08,1.11,147.9635,M,14.4298,M,,*5C
$GPGSV,3,1,10,27,13,078,43,05,31,307,48,16,24,042,43,02,10,267,43*7D
$GPGSV,3,2,10,26,03,031,36,07,75,215,51,09,57,121,53,30,40,234,50*76
$GPGSV,3,3,10,23,29,117,46,04,36,114,46*70
$GPGGA,124749.90,5543.3227105,N,03739.1366737,E,1,08,1.11,147.9664,M,14.4298,M,,*54
RE005%off%

Нужно в каждой строке, начинающейся с "$GPGGA" или "$GPGSV", найти восьмибитную XOR-сумму всех символов между «$» и «*» сложить их и сравнить в 16-тиричной системе с последними двумя символами в строке. Для начала я решила выделить нужную часть строки и потом ее обрабатывать, на старом форуме с похожей задачей предложили справиться такими строчками кода:

firstSpace=s.find_first_of(" ");
secondSpace=s.find_first_of(" ",firstSpace+1);
fromSpaceToSpace=s.substr(s,firstSpace,secondSpace-firstSpace);

там человек выделял строку от пробела до пробела, я попробовала адаптировать под свой код, но ничего не работает, возможно будет лучше породить класс для этого, но уровень знаний мне не позволяет сделать это правильно

#include <iostream>
#include <fstream>
#include <string>
#include <stdlib.h>

using namespace std;


int main() {
string line, dollar, star, Checksum; 
float *t0 = NULL; 
int tount = 0;  
int k; 
    ifstream logs_("C:/Users/Olya/Desktop/LogGLO.txt"); 
    ofstream tout("outLOGTime.txt"); 
    ofstream pout("outLOGPot.txt"); 
    if (logs_.is_open()) 
    {
        while(getline(logs_,line))
        {   
            //line.find("RE004%on%")
            k = 0;
            if(line.substr(0,6) == "$GPGGA", "$GPGSV")
                dollar = line.find_first_of('$');
                star = line.find_first_of('*', dollar + 1);
                Checksum = line.substr(line, dollar, star - dollar);
                for (size_t i = 0; i < Checksumk.size(); i++)
                    {
                    }

                if (line.substr(0,6) == "$GPGSV") 
                {
                    for (size_t i = 0, N = 7; i < line.size(); i++)
                    {
                        if (line[i] == ',') k++;
                        if(k == N)
                        {
                        pout << line.substr(i+1,2) << endl;
                        if ((N += 4) > 19) break;
                        }
                    }
                }
        logs_.close(); 
        }
    }
    else 
        cout<<"File is not open"<<'\n';
    tout.close(); 
    pout.close(); 
    return 0;
}
READ ALSO
откуда $_POST и $_GET в php читают входные данные?

откуда $_POST и $_GET в php читают входные данные?

Я пишу свой небольшй HTTP-сервер на с++В нем мне нужно обрабатывать динамические запросы

80
Ch++” or “ch+1” in C++?

Ch++” or “ch+1” in C++?

Почему cout думает что ch - это int ? А в случае ++ch нет

181
Проблема с инициализацией

Проблема с инициализацией

у меня проект состоит из 3-х файлов : Header - с прототипами ф-ций Source - с функциями Source1 - с выводом функций на экран Проблема в том, что я хочу написать...

219
Как начать перебор std::list с N-го элемента?

Как начать перебор std::list с N-го элемента?

Есть два алгоритма перебора листа:

197