正在重写所需格式的提取运算符

Overriding extraction operator for a expected format

本文关键字:提取 运算符 格式 重写      更新时间:2023-10-16

我想覆盖MyClass的提取运算符,它有三个int属性,第一个不超过三个数字,第二个一个两个,最后一个。

输入必须严格如下:123-45-6789,如果其中一个部分的数字少于最大值,则用户必须输入额外的0s,如001-02-3456

我该怎么做?我应该把每个字母读成char,然后创建三个int吗?在给定多个char的情况下,创建int的最佳方式是什么?

你可以这样做:

MyClass{
    int a,b,c;
    MyClass(const char * str)
    {
        a = b = c = 0; 
        while(*str!='-')
        {
            if(*str<'0' or *str>'9')
            {
                throw std::std::invalid_argument("");
            }
            else
            {
                a=a*10+(*str)-'0';
                ++str;
            }
        }
        while(*str!='-')
        {
            if(*str<'0' or *str>'9')
            {
                throw std::std::invalid_argument("");
            }
            else
            {
                b=b*10+(*str)-'0';
                ++str;
            }
        }
        while(*str!=0)
        {
            if(*str<'0' or *str>'9')
            {
                throw std::std::invalid_argument("");
            }
            else
            {
                c=c*10+(*str)-'0';
                ++str;
            }
        }
    }
};

或者更简单。。。。