C++ 词法转换部分转换-可能吗?

C++ 词法转换部分转换-可能吗?,c++,boost,C++,Boost,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::c

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;
}
#包括
#包括“boost/lexical_cast.hpp”
#包括
int main()
{
std::string src=“124is”;
intinumber=boost::词法转换(src);

std::coutboost/lexical\u cast使用stringstream将字符串转换为其他类型,因此您必须确保字符串可以完全转换!否则,它将引发bad\u lexical\u 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;

}
#包括
#包括
#包括
#定义错误\u词法\u转换1
int main()
{
使用boost::词法转换;
int a=0;
双b=0.0;
std::string s=“”;
int e=0;
尝试
{ 
//----字符串-->整数
a=词汇投射(“123”);//好
b=词汇投射(“123.12”);//好
//----双倍于弦好
s=词汇投射(“123456.7”);
//----坏
e=词汇(abc);
}
捕获(boost::bad_词法_cast&e)
{
//错误的词法转换:无法将源类型值解释为目标

std::cout如果我正确理解了您的需求,似乎在
词法转换之前首先从字符串中删除非数字元素将解决您的问题。我在这里概述的方法使用isdigit函数,如果给定的
字符是0到9的数字,它将返回true

#include <iostream>
#include "boost/lexical_cast.hpp"
#include <string>
#include <algorithm>
#include <cctype> //for isdigit

struct is_not_digit{
    bool operator()(char a) { return !isdigit(a); }
};

int main()
{
    std::string src = "124is";
    src.erase(std::remove_if(src.begin(),src.end(),is_not_digit()),src.end());
    int iNumber = boost::lexical_cast<int>(src);
    std::cout << "After conversion " << iNumber << std::endl;
}
#包括
#包括“boost/lexical_cast.hpp”
#包括
#包括
#包括//用于isdigit
结构不是数字{
布尔运算符()(字符a){return!isdigit(a);}
};
int main()
{
std::string src=“124is”;
src.erase(std::remove_if(src.begin(),src.end(),is_not_digit()),src.end());
intinumber=boost::词法转换(src);

std::cout
std::stoi
应该可以。谢谢Chris。让我试试。你有什么要求阻止你预处理字符串吗?谢谢。谢谢。谢谢。不客气。我也不太熟悉boost!我认为boost值得仔细学习!!一起去吧!