Предполагая, что эти данные уже содержатся в std::string
, я бы предложил решение, используя std::stringstream
, в частности, std::istringstream
.
Я вижу, что выимеют как действительные числа (104.8
, 7.8e-33
), так и строки (..
), которые, как я предполагал, также считаются отдельными и действительными токенами.В этом случае мы можем разделить ваши данные на отдельные std::string
s:
#include <iostream>
#include <sstream> // std::stringstream family
#include <array>
#include <string>
int main() {
std::string data{"104.8 10.9 7.8e-33 2.6e-29 59" // string concatenation
"248 .. 46 230 .. 20 336 .. 0.87"};
std::istringstream stream{data}; // helper stream
// Assuming that we're certain that *data* holds exactly 14 tokens, we can
// use a simple loop. Otherwise we would've needed to check stream's state
// after every operation.
std::array<std::string, 14> tokens{};
for(std::size_t i{0}; i < 14; ++i) {
stream >> tokens[i];
}
// lastly, we can print the results:
for(const auto& token : tokens) {
std::cout << token << ' ';
}
}
При этом будет напечатано: 104.8 10.9 7.8e-33 2.6e-29 59248 .. 46 230 .. 20 336 .. 0.87
.
Обратите внимание, что дополнительные пробелы между токенами исчезли.