关于std:如何在标准C ++中读取由逗号分隔的两个数字的stdin?

How to read stdin in standard C++ for two numbers separated by comma?

本问题已经有最佳答案,请猛点这里访问。

我必须使用标准C++库(没有Boost)读取逗号分隔的两个数字。所以用户将在控制台中按格式键入数字,

实例

2,33、10

如果是C,我可以做SCANF("%d,%d",i,j),我怎么做C++?cin默认使用空格作为分隔符,如何更改cin的分隔符?


我将使用的方法是使用自定义comma操纵器:

1
2
3
4
5
6
7
8
9
10
11
12
std::istream& comma(std::istream& in) {
    std::istream::sentry cerberos(in);
    if (cerberos) {
        if (in.peek() == ',') {
            in.ignore();
        }
        else {
            in.setstate(std::ios_base::failbit);
        }
    }
    return in;
}

然后,您只需在应该读取逗号的地方注入comma,例如:

1
2
3
4
int i, j;
if (in >> i >> comma >> j) {
    // process the data
}