我有一个需要接受用户输入的 C++ 程序。用户输入要么是两个整数(例如:1 3),要么是一个字符(例如:s)。
我知道我可以像这样得到两个整数:
cin >> x >> y;
但是,如果输入的是 char,我该如何获取 cin 的值呢?我知道 cin.fail() 会被调用,但是当我调用 cin.get() 时,它不会检索输入的字符。
谢谢您的帮助!
我有一个需要接受用户输入的 C++ 程序。用户输入要么是两个整数(例如:1 3),要么是一个字符(例如:s)。
我知道我可以像这样得到两个整数:
cin >> x >> y;
但是,如果输入的是 char,我该如何获取 cin 的值呢?我知道 cin.fail() 会被调用,但是当我调用 cin.get() 时,它不会检索输入的字符。
谢谢您的帮助!
用于std::getline
将输入读入字符串,然后用于std::istringstream
解析出值。
您可以在 c++11 中执行此操作。这个解决方案很健壮,会忽略空格。
这是在 ubuntu 13.10 中使用 clang++-libc++ 编译的。请注意,gcc 还没有完整的正则表达式实现,但您可以使用Boost.Regex作为替代方案。
编辑:添加负数处理。
#include <regex>
#include <iostream>
#include <string>
#include <utility>
using namespace std;
int main() {
regex pattern(R"(\s*(-?\d+)\s+(-?\d+)\s*|\s*([[:alpha:]])\s*)");
string input;
smatch match;
char a_char;
pair<int, int> two_ints;
while (getline(cin, input)) {
if (regex_match(input, match, pattern)) {
if (match[3].matched) {
cout << match[3] << endl;
a_char = match[3].str()[0];
}
else {
cout << match[1] << " " << match[2] << endl;
two_ints = {stoi(match[1]), stoi(match[2])};
}
}
}
}