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