显然std::stoi
不接受以指数表示法表示整数的字符串,如"1e3"
(= 1000)。有没有一种简单的方法可以将这样的字符串解析为整数?有人会认为,由于这种表示法在C ++源代码中有效,标准库有一种解析它的方法。
答案 0 :(得分:2)
您可以使用stod
(请参阅docs)来执行此操作,方法是将其解析为双重优先。 在回退时要小心精确度问题......
#include <iostream> // std::cout
#include <string> // std::string, std::stod
int main () {
std::string text ("1e3");
std::string::size_type sz; // alias of size_t
double result = std::stod(text,&sz);
std::cout << "The result is " << (int)result << std::endl; // outputs 1000
return 0;
}
答案 1 :(得分:2)
有人会认为,由于这种表示法在C ++源代码中有效,标准库有一种解析它的方法。
库和编译器是无关的。此语法在C ++中工作的原因是该语言允许您将类型double
的表达式分配给整数变量:
int n = 1E3;
将double
表达式(即double
类型的数字文字)分配给整数变量。
知道这里发生了什么,您应该能够轻松识别标准C ++库中的功能,以满足您的需求。
答案 2 :(得分:0)
将指数表示法发送到std::stoi
会过于频繁地溢出,而C ++中的整数溢出是未定义的行为。
您需要建立自己的地方,以便根据您的具体要求制定边缘案例。
我倾向于不沿std::stod
路线前进,因为如果double
的整数部分不能,int
到double
的演员阵容是未定义的行为由int
表示。
答案 3 :(得分:0)
您可以使用标准流将其作为双精度读取,例如
double d;
std::cin >> d; //will read scientific notation properly
然后将它转换为int,但显然double可以表示比int更多的值,所以要小心。