2009-09-11 77 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';