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>之间由不同数量的空格分隔
我想使用正则表达式进行解析,并将这些值放入数组中。因为我们知道有多少匹配项,所以可以将数组设置为长度14char数组[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
中,如问题中所示?回答此问题可能会让我用示例回答整个问题。