2017-01-11 34 views
0

比方说,我有一个名为“数字”的字符串变量中的字符串定义为“12345”:将字符串值改为int,不许使用任何从字符串库

string numbers = "12345"; 

如果是这样的话,我如何转换该变量,以便我可以将它们存储为整数?现在我知道有很多方法可以使用像stoi,atoi,stringstream等字符串库来实现它了,但是这里的技巧是让它可以不使用任何这些。当我有很多有效的方法来做这件事时,我个人不理解这个任务,但这只是我的看法。

我在想如果我会做一个函数,它存储单个数字作为字符数组使用循环,并以某种方式将它们作为一个整体粘在一起。我正走进正确的轨道吗?

谢谢

编辑:我说的是C++

+0

@ KENY-N我理解,但是否有复制,在C任何方式++? – user3521038

回答

0

试试这个:

string numbers = "12345"; 
int result = 0; 
for (int i = 0; i < numbers.size(); i++) { 
    result += (numbers[i] - 48) * pow(10, (numbers.size() - i - 1)); 
} 
cout << result << endl; 

主要的想法是,字符 '0' 是48 ASCII
您可以检查是否numbers[i]在48到57范围内以验证输入。

+0

真棒。谢谢! – user3521038

+0

为什么不使用''0'而不是'48'呢?而'size()'是OP建议他们可能想要避免的字符串库函数(以及方法)。 –

2

通过使用(ch - '0'),可以将读取的每个字符转换为等效的int。

std::string str = "12345"; 
int number = 0; 

for(auto ch : str) 
{ 
    number = (number * 10) + (ch - '0'); 
} 

return 0; 
+0

是的。这是没有必要的。只有当str包含任何其他字符('a','b')而不是数字时,它才包含0到9之间的整数。我将进行编辑。 – MRB

0
#include <iostream> 
using namespace std; 

int main() { 
    string numbers = "12345"; 
    int result = 0; 
    for (int digit : numbers) 
     result = digit - 48 + result * 10; 
    cout << result << endl; 
    return 0; 
} 

输出

12345