2017-01-11 60 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