我的程序将采用如下行:1,5,6,7 然后它会将每个整数存储到一个数组中。
我认为,首先输入应该作为字符串。但我怎么能用逗号分隔这个呢?空间分隔符?然后它将如何作为整数存储在数组中?
答案 0 :(得分:5)
要进行拆分,您可以使用std::string::find
和std::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 的手动解析方法可能更适合。