C ++获取int中的每个数字

时间:2011-01-06 12:48:36

标签: c++

我有一个整数:

int iNums = 12476;

现在我希望将iNums中的每个数字都作为整数。类似的东西:

foreach(iNum in iNums){
   printf("%i-", iNum);
}

所以输出结果为:“1-2-4-7-6-”。 但我实际上需要每个数字作为int而不是char。

感谢您的帮助。

13 个答案:

答案 0 :(得分:33)

void print_each_digit(int x)
{
    if(x >= 10)
       print_each_digit(x / 10);

    int digit = x % 10;

    std::cout << digit << '\n';
}

答案 1 :(得分:20)

将其转换为字符串,然后迭代字符。对于转换,您可以使用std::ostringstream,例如:

int iNums = 12476;
std::ostringstream os;

os << iNums;
std::string digits = os.str();

通常使用的术语(对于你所说的“数字”)是“数字” - 请使用它,因为它使你的帖子的标题更容易理解: - )

答案 2 :(得分:9)

这是一个更通用但递归的解决方案,它产生一个数字向量:

void collect_digits(std::vector<int>& digits, unsigned long num) {
    if (num > 9) {
        collect_digits(digits, num / 10);
    }
    digits.push_back(num % 10);
}

由于存在相对较少的数字,递归是有条理的。

答案 3 :(得分:4)

我不测试它只是写下我脑子里的东西。任何语法错误的借口

这是online ideone demo

vector <int> v; 

int i = ....
while(i != 0 ){
    cout << i%10 << " - "; // reverse order
    v.push_back(i%10); 
    i = i/10;
}

cout << endl;

for(int i=v.size()-1; i>=0; i--){
   cout << v[i] << " - "; // linear
}

答案 4 :(得分:1)

您可以使用此功能执行此操作:

void printDigits(int number) {
    if (number < 0) { // Handling negative number
        printf('-');
        number *= -1;
    }
    if (number == 0) { // Handling zero
        printf('0');
    }
    while (number > 0) { // Printing the number
        printf("%d-", number % 10);
        number /= 10;
    }
}

答案 5 :(得分:0)

从D.Shawley的回答中得出,可以通过输出结果来进一步完全回答:

void stream_digits(std::ostream& output, int num, const std::string& delimiter = "")
{
    if (num) {
        stream_digits(output, num/10, delimiter);
        output << static_cast<char>('0' + (num % 10)) << delimiter;
    }
}

void splitDigits()
{
    int num = 12476;    
    stream_digits(std::cout, num, "-");    
    std::cout << std::endl;
}

答案 6 :(得分:0)

我不知道这是更快,更慢还是没有价值,但这可能是另一种选择:

int iNums = 12476;
string numString;
stringstream ss;
ss << iNums;
numString = ss.str();
for (int i = 0; i < numString.length(); i++) {
    int myInt = static_cast<int>(numString[i] - '0'); // '0' = 48
    printf("%i-", myInt);
}

我指出这一点,因为iNums暗示可能是用户输入,如果用户输入首先是一个字符串,你就不需要经历将int转换为字符串的麻烦。

(to_string可以在c ++ 11中使用)

答案 7 :(得分:0)

根据@ Abyx的回答,但使用div,这样每个数字只能进行1次除法。

#include <cstdlib>
#include <iostream>

void print_each_digit(int x)
{
    div_t q = div(x, 10);

    if (q.quot)
        print_each_digit(q.quot);

    std::cout << q.rem << '-';
}

int main()
{
    print_each_digit(12476);
    std::cout << std::endl;
    return 0;
}

输出:

1-2-4-7-6-

N.B。仅适用于非负的整数。

答案 8 :(得分:0)

在“pos”位置获取数字(从位置1开始为最低有效数字(LSD)):

digit = (int)(number/pow(10,(pos-1))) % 10;
  

示例:number = 57820 - &gt; pos = 4 - &gt; digit = 7

按顺序获取数字:

int num_digits = floor( log10(abs(number?number:1)) + 1 );
for(; num_digits; num_digits--, number/=10) {
    std::cout << number % 10 << " ";
}
  

示例:number = 57820 - &gt;输出:0 2 8 7 5

答案 9 :(得分:0)

我的解决方案:

void getSumDigits(int n) {
    std::vector<int> int_to_vec;
    while(n>0)
    {
        int_to_vec.push_back(n%10);
        n=n/10;
    }

    int sum;

    for(int i=0;i<int_to_vec.size();i++)
    {
        sum+=int_to_vec.at(i);

    }
    std::cout << sum << ' ';
}

答案 10 :(得分:-1)

我知道这是一篇很老的帖子,但所有这些答案对我来说都是不可接受的,所以我自己写了!

我的目的是为屏幕渲染一个数字,因此是函数名称。

void RenderNumber(int to_print)
{
    if (to_print < 0)
    {
        RenderMinusSign()
        RenderNumber(-to_print);
    }
    else
    {
        int digits = 1; // Assume if 0 is entered we want to print 0 (i.e. minimum of 1 digit)
        int max = 10;

        while (to_print >= max) // find how many digits the number is 
        {
            max *= 10;
            digits ++;
        }

        for (int i = 0; i < digits; i++) // loop through each digit
        {
            max /= 10;
            int num = to_print / max; // isolate first digit
            to_print -= num * max; // subtract first digit from number
            RenderDigit(num);
        }
    }
}

答案 11 :(得分:-1)

这是执行此操作的最简单方法

int num;
short temp = 0;
cin>>num;

while(num!=0){
    temp = num%10;
    
    //here you will get its element one by one
    //you can perform your action here.
    
    num /= 10;
}

答案 12 :(得分:-7)

int iNums = 12345;
int iNumsSize = 5;
for (int i=iNumsSize-1; i>=0; i--) {
    int y = pow(10, i);
    int z = iNums/y;
    int x2 = iNums / (y * 10);
    printf("%d-",z - x2*10 );
}