嗯,我正在做一个基本的程序,处理至极像一些输入:
2 + 2
所以,我需要添加2 + 2.
我做了某事ng像:
string mys "2+2";
fir = mys[0];
sec = mys[2];
但现在我想添加“fir”到“sec”,所以我需要将它们转换为Int。 我试过“int(fir)”,但没有奏效。
嗯,我正在做一个基本的程序,处理至极像一些输入:
2 + 2
所以,我需要添加2 + 2.
我做了某事ng像:
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");
SOLU重刑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”,“+”和“2”。一旦你完成了,你可以简单地调用一个函数,比如atoi上你想要转换为整数的字符串。
例子:
string str = "2";
int i = atoi(str.c_str()); //value of 2
但是,如果你想成为能够处理非整数,以及这将让稍微复杂一些。在这种情况下,最好的办法是在操作数(+ -/*等)上分开,然后在数字串上查找小数点。如果你找到一个,你可以把它当作一个double,并使用atof函数而不是atoi,如果你不这样做,只需要用atoi。
为什么这会降低投票率? – MGZero
@MGZero有人正在做一个混蛋,并且在回答问题。 – Kiril
最近似乎在这里的时间顺序。 –