如何使用cin接受字符串和int?

时间:2016-03-31 16:51:30

标签: c++ cin

如何提取一个字符串后跟一个int,忽略任何空格?不允许使用整数后面的任何字符。像这样的东西: 这些输入字符串应该给我字符串(“X”)和int(1):

"X1"
"X1 " 
"X 1"
"X   1"
"X 1 "
"XX 1"

此外,我需要在此整数“1”后检测无效字符,因此这些输入不可接受:

"XX 1d" // after 1 only ws should be OK
"XX 1 2" // after 1 only ws should be OK

1 个答案:

答案 0 :(得分:0)

这是少数几个我认为regex是迄今为止最佳解决方案的案例之一。

您可以使用正则表达式:

^\s*([a-zA-Z]+)\s*(\d+)\s*$

然后使用regex_match进行检查。对于输入string foo

smatch bar;

if(regex_match(foo, bar, regex{"^\\s*([a-zA-Z]+)\\s*(\\d+)\\s*$"})) {
    cout << "OK: " << bar[1] << '\t' << bar[2] << endl;
} else {
    cout << "not OK\n";
}

Live Example