我正在使用C ++开发纸牌游戏,我想通过getline()获得一些用户输入。输入必须采用此特定格式:
“ 1 2 3 4 5 6”
数字范围是 1-11 ,每个数字必须分隔一个空格。用户正在为矢量输入索引号。假设他写了“ 1 2 3”,并且命中进入,则矢量对位置0、1和2进行了定位。
考虑到设计决定,让用户输入矢量(或基本上是他们的卡的)位置,我也接受其他建议。
玩家卡以“ 1 blue”的格式显示,并作为字符串存储在向量中。我认为用户输入整个卡名太麻烦了,所以我选择使用矢量索引。
下面是我的正则表达式字符串的代码段。可以,有点。它只是将整个字符串推入向量中,而缺少10。但是我不需要这样的1个向量元素:“ 1 2 3 4”,我需要4个向量元素,每个数字都是一个元素。
不匹配的内容:
“ 1234567”
“ abcdef”
“ 12 34 567 32”
如果您需要任何其他背景信息,我们将很乐意提供。
预先感谢
int main()
{
int i = 0;
std::regex rx("([[:digit:]]\\s)+([[:digit:]]\\s)+");
std::string line = "1 2 3 4 5 6 7 8 9 10";
std::smatch m;
std::vector<std::string> catchit;
while (regex_search(line, m, rx))
{
std::cout << "Pattern found " << m[i] << '\n';
catchit.push_back(m[i]);
line = m.suffix().str();
i++;
}
return 0;
}
答案 0 :(得分:0)
这无需使用正则表达式即可解决我的问题,非常感谢@Nick
为什么不使用std :: cin?或者将您的getline输出包装到 std :: stringstream并使用运算符>>一次读取数字,然后 然后验证他们?例如。 std :: stringstream stream(line); / *循环* / 流>> val;如果(val <0 || val> 11)...