我想将整数转换为数组,因此它看起来如下所示:
int number = 123456 ;
int array[7] ;
结果:
array[0] = 1
array[1] = 2
...
array[6] = 6
答案 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);
}
我认为这可能是个好方法