PJ_*_*Boy 4 c++ string double class
我一直在努力寻找这一天的解决方案!你可能会把它标记为重新发布,但我真正想要的是一个没有使用boost lexical cast的解决方案.传统的C++方式很棒.我尝试了这段代码,但它返回了一组乱码数字和字母.
string line; 
double lineconverted;
istringstream buffer(line);
lineconverted;
buffer >> lineconverted;
我也试过这个,但它总是返回0.
stringstream convert(line);
if ( !(convert >> lineconverted) ) {
    lineconverted  = 0;
}
提前致谢 :)
编辑:对于我使用的第一个解决方案(乱码)..这是一个快照

Dev*_*lus 12
#include <sstream>
int main(int argc, char *argv[])
{
    double f = 0.0;
    std::stringstream ss;
    std::string s = "3.1415";
    ss << s;
    ss >> f;
    cout << f;
}
好处是,这个解决方案也适用于其他人,如整数等.
如果要重复使用相同的缓冲区,则必须ss.clear在两者之间进行.
还有一个更短的解决方案,您可以将值初始化为字符串流并同时将其刷新为double:
#include <sstream>
int main(int argc, char *argv[]){
   stringstream("3.1415")>>f ;
}
从 C++11 开始,您可以使用std::stod函数:
string line; 
double lineconverted;
try
{
    lineconverted = std::stod(line);
}
catch(std::invalid_argument)
{
    // can't convert
}
但解决方案std::stringstream也正确:
#include <sstream>
#include <string>
#include <iostream>
int main()
{
    std::string str;
    std::cin >> str;
    std::istringstream iss(str);
    double d = 0;
    iss >> d;
    std::cout << d << std::endl;
    return 0;
}