我想将一个整数转换为数组,使其看起来像下面这样:
int number = 123456 ;
int array[7] ;
得到的结果是:
array[0] = 1
array[1] = 2
...
array[6] = 6
也许更好的解决方案是倒推:
123456 % 10 = 6
123456 / 10 = 12345
12345 % 10 = 5
12345 / 10 = 1234
只需使用模运算:
int array[6];
int number = 123456;
for (int i = 5; i >= 0; i--) {
array[i] = number % 10;
number /= 10;
}
我给出了以下代码,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
您可以通过以下方式提取数字的最后一位:
int digit = number % 10;
number /= 10;
number
是否为正数。其他值需要额外处理。取该数字的log10以获取数字的位数。将其放在变量pos
中,然后,在循环中,取10的模数(n % 10
),将结果放入数组的pos
位置中。将pos
减1并将数字除以10。重复此操作直到pos == 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);
}
将整数转换为数组,您可以执行以下步骤:
count_digits()
函数,该函数将在忽略前导零后返回总位数。digits = count_digits(n);
int* arr = new int[count_digits(n)]
int digits = count_digits(num);
for (int i = digits; i > 0; i--){
arr[i-1] = num % 10;
num = num / 10;
}
num
是我们想要转换为数组的数字,而digits
是变量,它给出了一个给定数字中零前导数字的数量。如果这真的是作业,那就给老师看看吧 - 只是为了好玩 ;-)
注意!性能非常差,达到您期望的效果的方法笨拙且通常不要在家里(工作)这样做;-)
#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" ) );
}
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
}
我现在能想到的最简单的方法是:
char array[40];
int number = 123456;
memset(array, 0x00, sizeof(array));
sprintf(array, "%d", number);