2011-09-06 61 views
0

可能重复:
How to convert a single char into an intChar到Int的C++?

嗯,我正在做一个基本的程序,处理至极像一些输入:

2 + 2

所以,我需要添加2 + 2.

我做了某事ng像:

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

但现在我想添加“fir”到“sec”,所以我需要将它们转换为Int。 我试过“int(fir)”,但没有奏效。

回答

5

有多种将字符串转换为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"); 

SOLU重刑3:使用C++ Streams

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

为什么这会降低投票率? – MGZero

+1

@MGZero有人正在做一个混蛋,并且在回答问题。 – Kiril

+0

最近似乎在这里的时间顺序。 –

2

好吧,那么首先为什么你尝试没有工作一个多小的底色。在你的例子中,fir被声明为一个字符串。当你试图做int(fir),它与(int)fir相同时,你试图从一个字符串到一个整数的C风格转换。基本上你会得到垃圾,因为C++中的C风格转换将通过所有可用的转换运行,并采取第一个可行的转换。充其量你将获得代表字符2的内存值,这取决于你使用的字符编码(UTF-8,ascii等等)。例如,如果fir包含“2”,那么您可能会得到0x32作为整数值(假设为ascii)。你真的不应该使用C风格的转换,并且使用它们的唯一地方是数字类型之间的转换。

如果您的示例中给出了一个字符串,首先应该使用类似strtok的函数将字符串分隔为相关的字符序列(标记)。在这个简单的例子中,将是“2”,“+”和“2”。一旦你完成了,你可以简单地调用一个函数,比如atoi上你想要转换为整数的字符串。

例子:

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

但是,如果你想成为能够处理非整数,以及这将让稍微复杂一些。在这种情况下,最好的办法是在操作数(+ -/*等)上分开,然后在数字串上查找小数点。如果你找到一个,你可以把它当作一个double,并使用atof函数而不是atoi,如果你不这样做,只需要用atoi。