wyciąganie fragmentów ze stringa

0

Mam taką formę stringa:czas=2017 11 24 16:18:28$OP=brak$ST= $ID=1$ID_obl=33$param1=0$param1=0$wynik=0$rzad=-1$kolumna=-1$

i nie mam pojęcia jak mógłbym to w miare prosty sposób przefiltrować na poszczególne zmienne
tzn np
string czas=2017 11 24 16:18:28
string OP=brak
int ID=1
itp.

0

O ile dane będą po kolei, to może być to coś takiego:

#include <iostream>
#include <string>
using namespace std;

template < typename T >
T get_var(string &s);

template <>
string get_var(string &s)
{
    const size_t pos = s.find('$');
    const string result = s.substr(0, pos);
    s = s.substr(pos + 1);
    return result.substr(result.find('=') + 1);
}

template <>
int get_var(string &s)
{
    return atoi(get_var<string>(s).c_str());
}

int main() {
    string s = "czas=2017 11 24 16:18:28$OP=brak$ST= $ID=1$ID_obl=33$param1=0$param1=0$wynik=0$rzad=-1$kolumna=-1$";
    const string czas = get_var<string>(s);
    const string OP = get_var<string>(s);
    const string ST = get_var<string>(s);
    const int ID = get_var<int>(s);
    const int ID_obl = get_var<int>(s);
    const int param1 = get_var<int>(s);
    const int param1_2 = get_var<int>(s);
    const int wynik = get_var<int>(s);
    const int rzad = get_var<int>(s);
    const int kolumna = get_var<int>(s);

    cout << "czas: " <<  czas << endl 
         << "OP: " << OP << endl 
         << "ST: " << ST << endl 
         << "ID:" << ID << endl 
         << "ID_obl: "<< ID_obl << endl
         << "param1: " << param1 << endl
         << "param1_2: " << param1_2 << endl
         << "wynik: " << wynik << endl
         << "rzad: " << rzad << endl
         << "kolumna: " << kolumna << endl;

    return 0;
}
0
mwl4 napisał(a):

O ile dane będą po kolei, to może być to coś takiego:

#include <iostream>
#include <string>
using namespace std;

template < typename T >
T get_var(string &s);

template <>
string get_var(string &s)
{
  const size_t pos = s.find('$');
  const string result = s.substr(0, pos);
  s = s.substr(pos + 1);
  return result.substr(result.find('=') + 1);
}

template <>
int get_var(string &s)
{
  return atoi(get_var<string>(s).c_str());
}

int main() {
  string s = "czas=2017 11 24 16:18:28$OP=brak$ST= $ID=1$ID_obl=33$param1=0$param1=0$wynik=0$rzad=-1$kolumna=-1$";
  const string czas = get_var<string>(s);
  const string OP = get_var<string>(s);
  const string ST = get_var<string>(s);
  const int ID = get_var<int>(s);
  const int ID_obl = get_var<int>(s);
  const int param1 = get_var<int>(s);
  const int param1_2 = get_var<int>(s);
  const int wynik = get_var<int>(s);
  const int rzad = get_var<int>(s);
  const int kolumna = get_var<int>(s);

  cout << "czas: " <<  czas << endl 
       << "OP: " << OP << endl 
       << "ST: " << ST << endl 
       << "ID:" << ID << endl 
       << "ID_obl: "<< ID_obl << endl
       << "param1: " << param1 << endl
       << "param1_2: " << param1_2 << endl
       << "wynik: " << wynik << endl
       << "rzad: " << rzad << endl
       << "kolumna: " << kolumna << endl;

  return 0;
}

a jeśli chciałbym mieć ?
float param1=0
float param1=0
float wynik=0

1

Robisz kolejną specjalizację:

#include <iostream>
using namespace std;

template < typename T >
T get_var(string &s);

template <>
string get_var(string &s)
{
    const size_t pos = s.find('$');
    const string result = s.substr(0, pos);
    s = s.substr(pos + 1);
    return result.substr(result.find('=') + 1);
}

template <>
int get_var(string &s)
{
    return atoi(get_var<string>(s).c_str());
}

template <>
float get_var(string &s)
{
    return static_cast<float>(atof(get_var<string>(s).c_str()));
}

int main() {
    string s = "czas=2017 11 24 16:18:28$OP=brak$ST= $ID=1$ID_obl=33$param1=0.5$param1=0.1$wynik=100.2$rzad=-1$kolumna=-1$";
    string czas = get_var<string>(s);
    string OP = get_var<string>(s);
    string ST = get_var<string>(s);
    int ID = get_var<int>(s);
    int ID_obl = get_var<int>(s);
    float param1 = get_var<float>(s);
    float param1_2 = get_var<float>(s);
    float wynik = get_var<float>(s);
    int rzad = get_var<int>(s);
    int kolumna = get_var<int>(s);

    cout << "czas: " <<  czas << endl 
         << "OP: " << OP << endl 
         << "ST: " << ST << endl 
         << "ID:" << ID << endl 
         << "ID_obl: "<< ID_obl << endl
         << "param1: " << param1 << endl
         << "param1_2: " << param1_2 << endl
         << "wynik: " << wynik << endl
         << "rzad: " << rzad << endl
         << "kolumna: " << kolumna << endl;

    return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0