我的程序将采用如下行: 1, 5, 6, 7 然后它将每个整数存储到一个数组中。
我认为,起初输入应该作为字符串。但是我怎么能用逗号和空格分隔符来分割它呢?那么它将如何以整数形式存储在数组中?
我的程序将采用如下行: 1, 5, 6, 7 然后它将每个整数存储到一个数组中。
我认为,起初输入应该作为字符串。但是我怎么能用逗号和空格分隔符来分割它呢?那么它将如何以整数形式存储在数组中?
对于拆分,您可以使用std::string::find
and std::string::substr
。str.find(", ")
例如在循环中调用,用 . 分割字符串substr
。
对于存储,你不应该使用数组,你应该使用std::vector
.
要将子字符串转换为整数,请参见例如std::stoi
。
除了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的手动解析方法可能更适合。