0

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

我认为,起初输入应该作为字符串。但是我怎么能用逗号和空格分隔符来分割它呢?那么它将如何以整数形式存储在数组中?

4

2 回答 2

5

对于拆分,您可以使用std::string::findand std::string::substrstr.find(", ")例如在循环中调用,用 . 分割字符串substr

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

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

于 2012-10-05T10:31:16.477 回答
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的手动解析方法可能更适合。

于 2012-10-05T11:24:08.340 回答