Wyrażenia regulane zapis wielu wyników do tablicy

0

Cześć,
Mam taki problem w wyrażeniu które ma wygląd
(10 40 2, 40.455 30 34.8 , 20 20 20 , 30 10 12)

Muszę znaleźć i wydobyć liczby (najlepiej jak by mi się udało "trójki" np. 10 40 2) bo później właśnie będą mi służyły jako współrzędne, więc chciał bym je zapisać w tablicy 3 wymiarowej.

Ponieważ wiem że zawsze występują w takich trójkach <liczba>spacja<liczba>spacja<liczba>, reszta może być różna ale zawsze ta "trójka" będzie miała taki wygląd. Liczba możne być zarówno całkowita jak i zmiennoprzecinkowa.

W związku z tym pomyślałem że użyję wyrażenia regularnego, ale nie jestem pewien czy jest ok.

([0-9]*)\.{0,1}([0-9]+)\s([0-9]*)\.{0,1}([0-9]+)\s([0-9]*)\.{0,1}([0-9]+)

Mam taki kod:

 
       #include<regex>

        std::string points="(10 40 2, 40.455 30 34.8 , 20 20 20 , 30 10 12)"

        std::regex model("([0-9]*)\.{0,1}([0-9]+)\s([0-9]*)\.{0,1}([0-9]+)\s([0-9]*)\.{0,1}([0-9]+)");
	
	std::smatch result;
        
        double  ***returnpoint;

	if(std::regex_search(multipoint,result,model))
	{
		cout<<result[0];
	}

Niestety nie wiem jak to zapisać to tablicy returnpoint wszystkie wyniki?
Potrzebne mi jest to bo potem będę tego używał przy obliczeniach i będzie mi wygodnie po prostu za pomocą trzech pętli for wydobyć wartości x y z.

Dziękuję z góry za pomoc, bo siedzę nad tym już drugi dzień i nie mam pomysłu.

0

A musi być regexp?

std::stringstream ssin("10 40 2, 40.455 30 34.8 , 20 20 20 , 30 10 12",ios_base::in);
while(ssin)
  {
   double x,y,z;
   if(!(ssin>>x>>y>>z)) break;
   cout<<"("<<x<<","<<y<<","<<z<<")"<<endl;
   char coma;
   ssin>>coma;
  }

lub:

std::stringstream ssin("(10 40 2, 40.455 30 34.8 , 20 20 20 , 30 10 12)",ios_base::in);
char coma;
double x,y,z;
while(ssin>>coma>>x>>y>>z) cout<<"("<<x<<","<<y<<","<<z<<")"<<endl;
0

Ok, ale jak dam np.
teskt ((1 2 3, (4 5 6), 1 2 3, 7 8 9, 3 5 6, 7 8 3, 9 6 7, 5 6 3, 4 3 8, 5 5 8, 7 4 2 )

to niestety nie idzie... Nie musi być rexep, chodzi mi o wydobycie x, y ,z .

1
#include <iostream>
#include <sstream>
using namespace std;

istream &noval(istream &s)
  {
   while(s)
     {
      int ch=s.peek();
      if((ch=='.')||(('0'<=ch)&&(ch<='9'))) break;
      s.get();
     }
   return s;
  }

void triple(istream &isin)
  {
   double x,y,z;
   while(isin>>noval>>x>>y>>z) cout<<"("<<x<<","<<y<<","<<z<<")"<<endl;
  }

void triple(const string &s)
  {
   stringstream ssin(s,ios_base::in);
   triple(ssin);
  }

int main()
  {
   triple("(10 40 2, 40.455 30 34.8 , 20 20 20 , 30 10 12)"); cout<<endl;
   triple("10 40 2, 40.455 30 34.8 , 20 20 20 , 30 10 12"); cout<<endl;
   triple("teskt ((1 2 3, (4 5 6), 1 2 3, 7 8 9, 3 5 6, 7 8 3, 9 6 7, 5 6 3, 4 3 8, 5 5 8, 7 4 2 )"); cout<<endl;
   cout<<"Pisz tekst skoncz go przez ^Z:"<<endl;
   triple(cin); cout<<endl;
   cin.clear();
   cout<<"koniec: ";
   cin.sync();
   cin.get();
   return 0;
  }

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