0

lexical_cast次の場合に例外をスローします。lexical_cast文字列を使用して整数に変換する方法はありますか。

#include <iostream>
#include "boost/lexical_cast.hpp"
#include <string>
int main()
{
        std::string src = "124is";
        int iNumber = boost::lexical_cast<int>(src);
        std::cout << "After conversion " << iNumber << std::endl;
}

atoi了解しました。の代わりに使用できますboost::lexical_cast

4

2 に答える 2

1

boost/lexical_cast は stringstream を使用して文字列から他の型に変換するため、文字列が完全に変換できることを確認する必要があります! そうしないと、bad_lexical_cast 例外がスローされます。これは例です:

#include <boost/lexical_cast.hpp>

#include <iostream>

#include <string> 

#define ERROR_LEXICAL_CAST     1 

int main()

{

    using boost::lexical_cast;

    int         a = 0;

    double        b = 0.0;

    std::string s = ""; 

    int            e = 0;    

    try

    { 

        // ----- string --> int 

        a = lexical_cast<int>("123");//good

        b = lexical_cast<double>("123.12");//good


        // -----double to string good

        s = lexical_cast<std::string>("123456.7"); 

        // ----- bad

        e = lexical_cast<int>("abc");

    }

    catch(boost::bad_lexical_cast& e)

    {

        // bad lexical cast: source type value could not be interpreted as target

        std::cout << e.what() << std::endl;

        return ERROR_LEXICAL_CAST;

    } 



    std::cout << a << std::endl;    // cout:123 

    std::cout << b << std::endl;    //cout:123.12 

    std::cout << s << std::endl;     //cout:123456.7 

    return 0;

}
于 2013-07-23T03:41:00.457 に答える