如何在C ++中将整数存储到数组中?

时间:2012-10-05 10:26:01

标签: c++

我的程序将采用如下行:1,5,6,7 然后它会将每个整数存储到一个数组中。

我认为,首先输入应该作为字符串。但我怎么能用逗号分隔这个呢?空间分隔符?然后它将如何作为整数存储在数组中?

2 个答案:

答案 0 :(得分:5)

要进行拆分,您可以使用std::string::findstd::string::substr。请致电循环中str.find(", "),将字符串与substr分开。

对于存储,你不应该使用数组,你应该使用std::vector

要将子字符串转换为整数,请参阅例如std::stoi

答案 1 :(得分:1)

除了 Joachim 的回答(并且考虑到你的问题没有被意外地标记为C ++ 11),最通用的方法可能是使用正则表达式:

#include <regex>
#include <vector>
#include <algorithm>
#include <iterator>

std::vector<int> parse(const std::string &str)
{
    //is it a comma-separated list of positive or negative integers?
    static const std::regex valid("(\\s*[+-]?\\d+\\s*(,|$))*");
    if(!std::regex_match(str, valid))
        throw std::invalid_argument("expected comma-separated list of ints");

    //now just get me the integers
    static const std::regex number("[+-]?\\d+");
    std::vector<int> vec;
    std::transform(std::sregex_iterator(str.begin(), str.end(), number), 
                   std::sregex_iterator(), std::back_inserter(vec), 
                   [](const std::smatch &m) { return std::stoi(m.str()); });
    return vec;
}

它可以根据您的需要进行调整,例如:如果你只想要正数,每个逗号后只有一个空格,或逗号前没有空格,但整体方法应该清楚。但是,对于您的特殊需求而言,整个事情可能过度,而 Joachim 的手动解析方法可能更适合。