2011-03-13 66 views

回答

0

,这个任务可能正试图获得在被访问的每一个数字的技术,例如,str[0] - '0' = 1和增加他们放置值。但是atoi快得多!

+0

我的理由是,这是IMO,可能是一个学生问题。 – jonsca 2011-03-13 13:41:47

+0

你能解释一下你的第一个回答部分的例子 – Raja 2011-03-13 13:44:42

+0

你的字符串是4位数,所以第一个地方的值是10^3。第一个字符是'1',所以为了得到它的值,减去'0'= 1。 10^3 = 1000。重复其他地方并将它们总和。 – jonsca 2011-03-13 13:47:49

4

使用atoi()

int foo = atoi(str.c_str()); 
+0

我想要不使用内置函数的答案 – Raja 2011-03-13 13:42:42

+0

您没有说明。 – 2011-03-13 14:09:10

1

如果您想正确执行此操作并测试转换中的错误,我建议使用boost::lexical_cast。下面是使用的例子:

#include <boost/lexical_cast> 

std::string num_string("1234"); 

try 
{ 
    int num=boost::lexical_cast<int>(numString); 
} 
catch (boost::bad_lexical_cast &ex) 
{ 
    // Handle failed conversions 
} 

如果因任何原因,你不能在项目中使用升压,至少使用一个标准stringstream进行转换,以获得错误校验一些外表。

+0

AFAIR lexical_cast非常昂贵。尽管同意使用stringstream – Ralf 2011-03-13 13:46:12

1

既然你标记它的C++,你可以看看istringstream

bool convertStr(const char *str, unsigned int *num) { 
    istringstream iss(str); 
    return (iss >> *num);  
} 

或者你甚至可以使用模板:

template <class T> 
bool fromString(T &t, const string &s, 
       ios_base& (*f)(ios_base&) = dec) { 
    istringstream iss(s); 
    return !(iss >> f >> t).fail(); 
}