读入美元金额(带美元符号)C ++

时间:2016-04-09 22:00:22

标签: c++ input user-input

我需要读取包含美元符号和美元金额的值(cin),但我只想读取金额。

换句话说,我有这样的输入:     " $ 3458.5," 但我想读入并存储     " 3458.5"

我想到的当前方法是以字符串形式读取值,删除第一个字符,然后转换为double。但是,我觉得这种方法效率低下,并且有更好的方法。有小费吗?谢谢!

4 个答案:

答案 0 :(得分:4)

我同意马格努斯:这似乎很小。但如果你真的想这样做,只需阅读一个字符,然后阅读一个双字母:

char ch;
double d;
std::cin >> ch >> d;

答案 1 :(得分:2)

if(stream.peek() == '$') stream.get();
stream >> amount;

答案 2 :(得分:1)

如果您使用scanf代替cin,则可以删除$,如果您知道它将始终存在并将信息直接写入浮点数。

float d;
scanf("$%f", d);

答案 3 :(得分:1)

C ++ 98/03有一个money_get方面可以做这样的事情。不幸的是,使用它是相当痛苦的(说得好)。

C ++ 11增加了一个get_money操纵器,使生活变得更加简单。它的工作原理如下:

#include <iostream>
#include <iomanip>

int main() {
    long double amt;

    std::cin.imbue(std::locale(""));
    std::cout.imbue(std::locale(""));

    std::cin >> std::get_money(amt);
    std::cout << std::showbase << std::put_money(amt) << "\n";
}

现在,有几点需要注意。首先,没有指定从外部到内部表示的转换,但在我已经看到的实现中,$3458.5读作{{1它被读取并存储为3458.5 - 也就是一个便士数量的计数。

然而,当您使用345850将数据写回时,它会与输入过程中所做的任何操作对称转换,因此如果您输入了put_money,那么它就会被删除以同样的方式写回来。

还有一点需要注意:我已经看到至少一个对输入格式有点奇怪的实现,因此在输入期间小数点后需要0或2位数,所以$3458.5或者$3458.50可以正常阅读,但$3458根本无法阅读(它会被视为转换失败)。