正在重写所需格式的提取运算符
Overriding extraction operator for a expected format
我想覆盖MyClass
的提取运算符,它有三个int
属性,第一个不超过三个数字,第二个一个两个,最后一个。
输入必须严格如下:123-45-6789
,如果其中一个部分的数字少于最大值,则用户必须输入额外的0
s,如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;
}
}
}
};
或者更简单。。。。
相关文章:
- 在C++中使用重载提取运算符时出现问题
- 使用 istream 提取运算符进行 csv 解析:如何检测缺失的字段值?
- 将文本文件数据读入字符数组时提取运算符的歧义
- 派生类 插入和提取运算符重载以及基类与派生类之间的强制转换
- 长方程加法/减法计算器,从文本文件中提取运算符和数字
- 运算符重载流提取运算符 (>>) C++会导致无限递归流提取
- 无法在C++中过载流提取运算符 (>>)
- 带有指针的重载插入/提取运算符
- 防止为字符串流提取运算符不支持的类型实例化模板类 (>>)
- 为什么我不能对提取运算符进行 decltype
- 是否保证标准提取运算符>>在失败时不会更改参数?
- 提取运算符 (>>) 可以覆盖变量吗?
- 重载提取运算符
- C++ 重载提取运算符 - 无法访问类中声明的私有成员
- 如何在重载提取运算符中读取行(忽略空格字符)
- 如何在C++中重载模板的朋友提取运算符(>>)?
- 两个类的重载提取运算符
- 为什么 cin 提取运算符会导致段错误
- 在派生类中使用提取运算符(>>)的方法以及在C++中处理静态数据成员的方法
- 提取运算符是否删除分隔符