2009-09-11 100 views
2

如果我有一個int說306.什麼是最好的方法來分開數字3 0 6,所以我可以單獨使用它們?我正在考慮將int轉換爲一個字符串然後解析它?整數和字符串解析

int num;  
stringstream new_num; 
    new_num << num; 

我不知道該怎麼做,但解析字符串。建議?

+0

值。例如,如果你的字符串是toto。 toto [0]將是3,toto [1] 0 ... – anno 2009-09-11 04:07:46

+1

索引或索引? – anno 2009-09-11 04:11:01

+0

查爾斯王子會寫「索引」。 – 2009-09-11 06:33:51

回答

11

不使用字符串,您可以向後工作。爲了得到6,

  1. 它只是306 % 10
  2. 接着,用
  3. 分回到1獲得下一個數字。

這將向後打印每一個數字:

while (num > 0) { 
    cout << (num % 10) << endl; 
    num /= 10; 
} 
2

只需一次遍歷流中的一個元素並將其提取出來。

char ch; 
while(new_num.get(ch)) { 
    std::cout << ch; 
} 
1

查爾斯的方式是非常直接的。然而,這並非罕見的數字轉換爲字符串,並做一些字符串處理,如果我們不想與數學:)

這裏奮鬥的過程,我們想做的事:

306 -> "306" -> ['3' ,'0', '6'] -> [3,0,6] 

一些語言是很容易做到這一點(紅寶石):

>> 306.to_s.split("").map {|c| c.to_i} 
=> [3,0,6] 

有些需要更多的工作,但還是很清楚的(C++):

#include <sstream> 
    #include <iostream> 
    #include <algorithm> 
    #include <vector> 

    int to_digital(int c) 
    { 
    return c - '0'; 
    } 

    void test_string_stream() 
    { 
    int a = 306; 
    stringstream ss; 
    ss << a; 
    string s = ss.str(); 
    vector<int> digitals(s.size()); 
    transform(s.begin(),s.end(),digitals.begin(),to_digital); 


    } 
+0

請注意,您的'to_digital()'不適用於所有編碼。 – sbi 2009-09-11 08:32:26

0
如果您使用stringstream的轉換,那麼「解析」的字符串就是一個通過索引訪問它的事

迴路串並收集像

int val = new_num[i]-'0';