cin 未知大小的一小部分
cin a fraction of unknown size?
如何在 c++ 中重载 cin>> 运算符以输入未知大小/字符的一小部分?具体来说,这个人可以输入 1/2 或 12/4 或 1/100,并且它必须能够接受其中任何一个并将它们输入到分数对象的分子和分母中。有没有一个简单的命令来确定字符在字符串中的位置,然后对它之前和之后的字符执行不同操作?
而且我不能让这个人在输入分子和分母斜杠后点击回车/回车。如 4(输入)/(输入)15(输入)。它们必须在一行中输入并从那里进行操作。
注意:我已经在这个网站上看过类似的问题,但似乎没有一个涉及不是由单个整数分子和分母组成的分数。
下面是一个非常简单的提取示例,使用 istringstream 进行提取
请注意,阅读时不得放置空格; 例如:123/34如果您想要它,只需使用 : std::cin >> numerator >> dummy_char >> denominator;
#include <iostream>
#include <sstream>
#include <string>
int main()
{
std::string str( "123/455" );
std::istringstream is( str );
std::size_t i, j = 0;
if( !(is >> i) ) return 1; // extract
is.get(); // get the '/'
if( !(is >> j) ) return 1; // extract
std::cout << i << '/' << j;
}
只需使用 cin
即可读取一个 int、斜杠和另一个 int。
int num, den;
string slash;
cin >> num >> slash >> den;
// optionally check that slash contains a slash if you don't trust the user
// if("/" != slash) abort();
编辑:我刚刚尝试过这个,它仅在分母之前的斜杠后面有一个空格时才有效。如果没有空格,您可以将slash
更改为字符。
编辑2:如果您有如下所示的分数结构,
struct Fraction
{
int num, den;
};
然后,您可以重载operator >>
直接读取分数。
istream& operator>>(istream &in, Fraction &f)
{
string slash;
return in >> f.num >> slash >> f.den;
}
// in main or somewhere
Fraction f;
cin >> f;
和以前一样,如果没有空格,您可以将slash
更改为 char,并且您可能希望在从 operator>>
返回 in
对象之前进行一些错误检查。
- 将整个东西加载为
string
, - 使用
string.find()
查找/
, - 像在C++中拆分字符串中所述拆分
string
,并使用以太stringstream
、atoi()
或其他任何东西将部分转换为数字, - ???
- 利润。
(对不起4和5,无法抗拒自己)
注意:当然,您应该在fraction
类的重载operator>>
中执行此操作。
你想读取和匹配分子和分母之间的/
字符,所以你需要缺少的operator>>(istream&, char)
函数:
std::istream &operator>>(std::istream &in, char ch) {
while (std::isspace(in.peek())) in.get();
if (in.peek() == ch)
in.get();
else
in.setstate(std::ios_base::failbit);
return in;
}
std::istream &operator>>(std::istream &in, fraction &fr) {
in >> fr.num >> '/' >> fr.denom;
return in;
}
该函数(或类似的东西)确实应该是标准库的一部分,但是自己添加它很容易。
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 最小硬币更换问题(自上而下方法)
- Qt VTK交互风格的信号到小部件
- 部分定义/别名模板模板参数
- 芬威克树(BIT).找到具有给定累积频率的最小索引,单位为 O(logN)
- 如何在Qt窗口小部件中使用QStringView(或QStringRef)
- 继承期间显示未知行为的子类
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- 使用递归的数组的最小值.这是怎么回事
- 由于PC显示设置的更改,Qt小部件被部分剪裁
- 如何在编译时专门化大型模板函数中的小部分
- 将阵列分成更小的连续部分,以使 NEO 值最大化
- 输入将为浮动价值,程序返回整个部分和小数值
- 将文件的未知部分读取到矢量
- cin 未知大小的一小部分
- QT 事件仅对部分小部件透明
- 把一个单词分成更小的部分
- 将部分字符*替换为较小的字符*
- 以小的部分读取大的二进制文件
- Codeforces 268B -未知值作为这个小c++程序的输出