C++;将结果从解析器放到数组中 我是C++的新手。p>

C++;将结果从解析器放到数组中 我是C++的新手。p>,c++,regex,c++11,parsing,C++,Regex,C++11,Parsing,我想知道如何解析字符串并将结果放入数组中 假设我有一根这样的线: 104.8 10.9 7.8e-33 2.6e-29 59 248。。46 230 .. 20 336 .. 0.87 它始终是相同的阶梯,这意味着,14个非[:space://code>之间由不同数量的空格分隔 我想使用正则表达式进行解析,并将这些值放入数组中。因为我们知道有多少匹配项,所以可以将数组设置为长度14char数组[14] 提前感谢您的帮助 假设此数据已经包含在std::string中,我将特别

我想知道如何解析字符串并将结果放入数组中

假设我有一根这样的线:
104.8 10.9 7.8e-33 2.6e-29 59 248。。46     230 ..      20   336 .. 0.87

它始终是相同的阶梯,这意味着,14个非
[:space://code>之间由不同数量的空格分隔

我想使用正则表达式进行解析,并将这些值放入数组中。因为我们知道有多少匹配项,所以可以将数组设置为长度14
char数组[14]


提前感谢您的帮助

假设此数据已经包含在
std::string
中,我将特别使用
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 << ' ';
    }
}
#包括
#include//std::stringstream系列
#包括
#包括
int main(){
std::字符串数据{“104.8 10.9 7.8e-33 2.6e-29 59”//字符串串联
"248 ..      46     230 ..      20   336 .. 0.87"};
std::istringstream stream{data};//helper stream
//假设我们确定*数据*正好包含14个令牌,我们可以
//使用一个简单的循环,否则我们需要检查流的状态
//每次手术后。
std::数组标记{};
对于(std::size_t i{0};i<14;++i){
流>>令牌[i];
}
//最后,我们可以打印结果:
用于(常量自动和令牌:令牌){

std::cout假设此数据已经包含在
std::string
中,我将特别使用
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 << ' ';
    }
}
#包括
#include//std::stringstream系列
#包括
#包括
int main(){
std::字符串数据{“104.8 10.9 7.8e-33 2.6e-29 59”//字符串串联
"248 ..      46     230 ..      20   336 .. 0.87"};
std::istringstream stream{data};//helper stream
//假设我们确定*数据*正好包含14个令牌,我们可以
//使用一个简单的循环,否则我们需要检查流的状态
//每次手术后。
std::数组标记{};
对于(std::size_t i{0};i<14;++i){
流>>令牌[i];
}
//最后,我们可以打印结果:
用于(常量自动和令牌:令牌){

std::cout不要使用
regex
,我建议使用
std::istringstream
和its。尤其要注意。使用
std::vector
,除非您在编译时知道将有14个元素。然后使用
std::array
@NathanOliver它总是有14个元素。@fureish谢谢,似乎我可以使用,但是我不知道如何把它放在数组中而不是变量中,我知道如果我按原样创建变量(int和double)会更好,但是因为我不处理变量(只按其他顺序打印标签),它可能会作为字符串本身填充。那么实际的问题是什么?你如何提供这个数据字符串?你输入了吗(始终为14)由制表符分隔的数字(注意-tab与两个空格不同,但在这种情况下并不重要)或者您是否已经将它们存储在一些
std::string
?回答这个问题可能会让我用示例来回答整个问题。我建议不要使用
regex
,而是使用
std::istringstream
及其。特别要注意。使用
std::vector
unless你知道在编译时会有14个元素。然后使用
std::array
@NathanOliver它总是有14个元素。@Fureish谢谢,看起来我可以使用,但我不知道如何将它放在数组中而不是变量中,我知道如果我按原样创建变量(int和double)会更好但是,由于我不处理变量(只打印以其他顺序分隔的制表符),它可能会作为字符串本身填充。那么,实际问题是什么?如何提供此数据字符串?是否输入(始终为14)由制表符分隔的数字(注意-制表符与两个空格不同,但在这种情况下无关紧要)或者您是否已经将它们存储在一些
std::string
中,如问题中所示?回答此问题可能会让我用示例回答整个问题。