C++ C+中的字符到Int+;?
可能重复:C++ C+中的字符到Int+;?,c++,char,int,C++,Char,Int,可能重复: 我正在做一个基本程序,它处理一些输入,比如: 2+2 所以,我需要加上2+2 我做了这样的事情: string mys "2+2"; fir = mys[0]; sec = mys[2]; 但是现在我想把“fir”加上“sec”,所以我需要把它们转换成Int。 我试过“int(fir)”但没有成功。你试过了吗?有多种方法可以将字符串转换为int 解决方案1:使用传统C功能 解决方案2:使用词法转换(最合适和最简单) 好的,首先让我们回顾一下为什么你的尝试没有成功。在您的示例中,f
我正在做一个基本程序,它处理一些输入,比如: 2+2 所以,我需要加上2+2 我做了这样的事情:
string mys "2+2";
fir = mys[0];
sec = mys[2];
但是现在我想把“fir”加上“sec”,所以我需要把它们转换成Int。
我试过“int(fir)”但没有成功。你试过了吗?有多种方法可以将字符串转换为int 解决方案1:使用传统C功能 解决方案2:使用
词法转换
(最合适和最简单)
好的,首先让我们回顾一下为什么你的尝试没有成功。在您的示例中,fir被声明为字符串。当您尝试执行int(fir)时,它与(int)fir相同,您尝试将字符串转换为整数。本质上,您将获得垃圾,因为C++中的C样式的铸件将运行所有可用的铸件,并采用第一个铸件。充其量只能得到表示字符2的内存值,这取决于您使用的字符编码(UTF-8、ascii等)。例如,如果fir包含“2”,则可能会得到0x32作为整数值(假设为ascii)。您真的不应该使用c样式转换,而使用它们真正安全的唯一地方是数字类型之间的转换 如果给定的字符串与示例中的类似,则首先应使用strtok之类的函数将该字符串分隔为相关的字符序列(标记)。在这个简单的例子中,它将是“2”、“2+”和“2”。完成后,可以对要转换为整数的字符串简单调用函数,如atoi 例如:
string str = "2";
int i = atoi(str.c_str()); //value of 2
但是,如果您希望能够同时处理非整数,这将变得稍微复杂一些。在这种情况下,最好是在操作数(+-/*等)上进行分隔,然后在数字字符串上查找小数点。如果你找到了一个,你可以将其视为一个双精度函数,并使用函数atof而不是atoi,如果你没有,就坚持使用atoi。@MGZero有人是一个混蛋,对答案投了反对票。这似乎是最近这里的顺序。对于这种特殊情况,还有一个选项
fir=mys[0]-“0”代码>谢谢,但我更喜欢@Preatorian方式,是规范的吗?@dysoco只要您尝试将单个字符转换为int,我发布的代码就应该可以工作。如果整数的字符串表示形式长于1个字符,请使用上面显示的方法之一。
int x = boost::lexical_cast<int>("12345");
std::string hello("123");
std::stringstream str(hello);
int x;
str >> x;
if (!str)
{
// The conversion failed.
}
string str = "2";
int i = atoi(str.c_str()); //value of 2