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