Char to Int in C++?

Char to Int in C++?

本文关键字:C++ in Int to Char      更新时间:2023-10-16

可能重复:
如何将单个字符转换为int

嗯,我正在做一个基本程序,它处理一些输入,比如:

2+2

所以,我需要加上2+2。

我做了一些类似的事情:

string mys "2+2";
fir = mys[0];
sec = mys[2];

但现在我想把"fir"加成"sec",所以我需要把它们转换成Int。我试过"int(fir(",但没有成功。

有多种方法可以将字符串转换为int。

解决方案1:使用遗留C功能

int main()
{
    //char hello[5];     
    //hello = "12345";   --->This wont compile
    char hello[] = "12345";
    Printf("My number is: %d", atoi(hello)); 
    return 0;
}

解决方案2:使用lexical_cast(最合适和最简单(

int x = boost::lexical_cast<int>("12345"); 

解决方案3:使用C++ Streams

std::string hello("123"); 
std::stringstream str(hello); 
int x;  
str >> x;  
if (!str) 
{      
   // The conversion failed.      
} 

好吧,首先回顾一下为什么你的尝试没有奏效。在您的示例中,fir被声明为字符串。当您尝试执行与(int(fir相同的int(fir(时,您尝试了从字符串到整数的c样式强制转换。从本质上讲,你会得到垃圾,因为c++中的c样式转换将运行所有可用的转换,并采用第一个有效的转换。最多你会得到代表字符2的内存值,这取决于你使用的字符编码(UTF-8、ascii等(。例如,如果fir包含"2",那么你可能会得到0x32作为整数值(假设ascii(。你真的不应该使用c风格的强制转换,使用它们真正安全的地方只有数字类型之间的转换。

如果给定的字符串与示例中的字符串类似,那么首先应该使用strtok之类的函数将字符串分离为相关的字符序列(标记(。在这个简单的例子中,它是"2"、"+"answers"2"。完成后,您可以简单地对要转换为整数的字符串调用atoi等函数。

示例:

string str = "2";
int i = atoi(str.c_str()); //value of 2

然而,如果您想同时处理非整数,这将变得稍微复杂一些。在这种情况下,最好在操作数(+-/*等(上进行分离,然后在数字字符串上查找小数点。如果你找到了一个,你可以把它当作一个double,并使用函数atof而不是atoi,如果你没有,就坚持使用atoi。

您尝试过atoi或boost词法转换吗?