将整数转换为数组

时间:2009-12-07 16:11:01

标签: c++ arrays integer

我想将整数转换为数组,因此它看起来如下所示:

int number = 123456 ;
int array[7] ;

结果:

array[0] = 1 
array[1] = 2
...
array[6] = 6

12 个答案:

答案 0 :(得分:24)

或许更好的解决方案是倒退:

123456 % 10 = 6

123456 / 10 = 12345

12345 % 10 = 5

12345 / 10 = 1234

答案 1 :(得分:9)

只需使用模运算:

int array[6];
int number = 123456;
for (int i = 5; i >= 0; i--) {
    array[i] = number % 10;
    number /= 10;
}

答案 2 :(得分:5)

在这里我想到的是,integerToArray函数返回一个从整数值转换的向量。你也可以使用main函数测试它:

#include <iostream>
#include <vector>
using namespace std;

vector <int> integerToArray(int x)
{
    vector <int> resultArray;
    while (true)
    {
    resultArray.insert(resultArray.begin(), x%10);
    x /= 10;
    if(x == 0)
        return resultArray;
    }
}

int main()
{
    vector <int> temp = integerToArray(1234567);
    for (auto const &element : temp)
        cout << element << " " ;
    return 0;
}

//outputs 1 2 3 4 5 6 7 

答案 3 :(得分:4)

您可以通过这种方式提取数字的最后一位数字:

int digit = number % 10;
number /= 10;

请注意,您还应该检查number是否为正数。其他值需要额外处理。

答案 4 :(得分:2)

取数字的log10来获取位数。把它放进去,比如pos,然后,在一个循环中,取模10(n % 10),将结果放在位置pos的数组中。递减pos并将数字除以10.重复直到pos == 0

如果标志为负,你想对标志做什么?

答案 5 :(得分:0)

我现在能想象的最简单的方法是:

char array[40];
int number = 123456;

memset(array, 0x00, sizeof(array));

sprintf(array, "%d", number);

此外,您可以将每个数字转换为int,只需将char值减去0x30。

编辑:如果这是家庭作业,您的老师可能会要求您使用%运算符编写程序(例如12%10 = 2)。如果是这样的话,做好作业; - )

答案 6 :(得分:0)

您可以使用模数来确定最后一位数。

你可以使用除法将另一个数字移动到最后一位数字。

答案 7 :(得分:0)

你不能简单地“转换”它。整数不以十进制表示法在软件中表示。因此,您想要的个别数字不存在。必须计算它们。

所以,给定一个任意数字,你如何确定一个数?

我们可以除以10,然后取余数:对于123,除法将给出12,然后有剩余的3,所以我们有3个。 12告诉我们过去的那些,所以它可以作为我们下一次迭代的输入。我们把它除以10,得到1,得到2的余数。所以我们在数十位有2位,剩下1位用于数百位。将它除以10,得到零,余数为1.因此,我们在数百个位置得到1,在数十位得到2,在那些位置得到3。我们已经完成了,因为最后一个部门归零了。

答案 8 :(得分:0)

对于C / C ++版本(以及其他语言),请参阅问题Language showdown: Convert string of digits to array of integers?

答案 9 :(得分:0)

如果这是真正的功课,那就把它展示给你的老师 - 只是为了好玩;-)

小心!非常糟糕的表现,笨拙的方式达到你期望的效果,一般不在家做(工作); - )

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

typedef std::vector< int > ints_t;

struct digit2int
{
    int operator()( const char chr ) const
    {
        const int result = chr - '0';
        return result;
    }
};

void foo( const int number, ints_t* result )
{
    std::ostringstream os;
    os << number;
    const std::string& numberStr = os.str();
    std::transform(
        numberStr.begin(),
        numberStr.end(),
        std::back_inserter( *result ),
        digit2int() );
}

int main()
{
    ints_t array;
    foo( 123456, &array );
    std::copy(
        array.begin(),
        array.end(),
        std::ostream_iterator< int >( std::cout, "\n" ) );
}

答案 10 :(得分:0)

如果你想将它变成一个字符串,那么它会非常简单,就像其他人所说的那样使用%运算符:

假设num = 123,我们可以这样做:

string str;
while (num > 0)
{
   str = (num % 10) + str;  //put last digit and put it into the beginning of the string
   num = num /10;  //strip out the last digit
}

现在你可以使用str作为字符数组。使用数组执行此操作很麻烦,因为将数据放在数组的开头需要您转移其他所有内容。我们能做的是,不是将每个数字放入字符串中,而是将它放入堆栈中。它将按照这样的顺序放置它:3 2 1.然后我们可以逐个弹出顶部数字,并按正确顺序将其放入数组中。你的数组将如下所示:1 2 3.我将把实现留给你,因为这是作业。

@Broam有一个很好的解决方案,但就像他说的那样,这是为了倒退。我认为OP或者任何一个进入这个线程的人都希望它转发,这就是我发布这个的原因。如果您有更好的解决方案,请回复,我也很感兴趣。

答案 11 :(得分:0)

#include <cmath>
#include <vector>    

std::vector<int> vec;
for (int i = log10(input); i >= 0; i--)
{
  vec.push_back(input / int(std::pow(10, i)) % 10);
}

我认为这可能是个好方法