我有一个整数:
int iNums = 12476;
现在我希望将iNums中的每个数字都作为整数。类似的东西:
foreach(iNum in iNums){
printf("%i-", iNum);
}
所以输出结果为:“1-2-4-7-6-”。 但我实际上需要每个数字作为int而不是char。
感谢您的帮助。
答案 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)
我不测试它只是写下我脑子里的东西。任何语法错误的借口
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 );
}