C语言 在C中的数字之间插入空格
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/2084690/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Inserting spaces between digits in C
提问by MusicianCPlus
How would I go about taking a number like 123456and having it print as 1 2 3 4 5 6?
我将如何处理像这样的数字123456并将其打印为1 2 3 4 5 6?
回答by John Carter
The simplest way of doing this (though not the fastest) would probably be to first sprintfthe number to a string buffer, and then loop through the buffer printf-ing one character and one space at a time.
最简单的方法(虽然不是最快的)可能是首先sprintf将数字printf放入字符串缓冲区,然后循环遍历缓冲区 -一次一个字符和一个空格。
There's no built-in way of doing this within the standard printfformatting.
在标准printf格式中没有内置的方法来做到这一点。
回答by David Bo?jak
As 'jamesdlin' has mentioned in his comment, GMan's approach would work, however you will need to store it in a buffer in order to print out in the correct order (his algorithm would print out "6 5 4 3 2 1" for input 123456). At this point I'd say that it would be much simpler to just use sprintf as 'therefromhere' suggested in his answer (if this is not an algorithm class assignment of course).
正如 'jamesdlin' 在他的评论中提到的,GMan 的方法是可行的,但是您需要将它存储在缓冲区中以便以正确的顺序打印出来(他的算法会打印出“6 5 4 3 2 1”作为输入123456)。在这一点上,我会说只使用 sprintf 作为他的回答中建议的“therefromhere”会简单得多(当然,如果这不是算法类分配)。
In my opinion the simplest way to do it would be using recursion, this way you can print out digits in the right order without using buffers.
在我看来,最简单的方法是使用递归,这样您就可以在不使用缓冲区的情况下以正确的顺序打印出数字。
The recursive implementation is very simple:
递归实现非常简单:
void PrintfRecursivly(int number)
{
if (number < 0)
{
number *= -1;
printf("- ");
}
if (number > 10)
{
PrintfRecursivly(number / 10);
printf(" ");
}
printf("%d", number % 10);
}
int main()
{
int number = -78900456;
PrintfRecursivly(number);
return 0;
}
Input:
输入:
-78900456
-78900456
Output:
输出:
- 7 8 9 0 0 4 5 6
- 7 8 9 0 0 4 5 6
EDIT: Thanks to Steve Jessop who suggested a correct algorithm for positive integers while I was away. I changed the above method to print out correctly for all ints (positive and negative), without the last space.
编辑:感谢 Steve Jessop,他在我不在的时候为正整数提出了正确的算法。我更改了上述方法以正确打印所有整数(正数和负数),没有最后一个空格。
Please note that we can avoid checking for negative values in every recursion, by doing the check just once (in the main function or wherever) but I didn't write it because we would lose more on clarity than gain in performance.
请注意,我们可以避免在每次递归中检查负值,只需检查一次(在主函数中或其他任何地方),但我没有写它,因为我们会失去更多的清晰度而不是性能增益。
回答by GManNickG
A common method would be to extract each digit, and then print that digit. I won't give you the code, but it's the implemented version of:
一种常用的方法是提取每个数字,然后打印该数字。我不会给你代码,但它是实现的版本:
int d; // your number
/* While `d` is not zero */
/* Modulus `d` with 10 to extract the last digit */
/* Print it, with your space */
/* Divide by 10 to remove the last digit */
/* Repeat */
This will be backwards. I'll leave it as an exercise to you to fix that. (Hint: In the loop, put the result into an array of characters, and when you're finished start at the last index of the array and print backwards.)
这将是倒退。我将把它留给你来解决这个问题。(提示:在循环中,将结果放入一个字符数组中,完成后从数组的最后一个索引处开始向后打印。)
回答by dreamlax
char buffer[50];
int myNum = 123456;
int n;
int i;
n = snprintf(buffer, sizeof buffer, "%d", myNum);
for (i = 0; i < n; i++)
{
putchar(buffer[i]);
putchar(' ');
}
putchar('\n');
回答by ratnaveer
int number = 123456;
char strNumber[64];
strNumber[0] = '#include <stdio.h>
#include <math.h>
void print_number(unsigned int number) {
int n = number, c = 0, p;
while (n > 0) {
n /= 10;
c++;
}
for (n = c - 1; n >= 0; n--) {
p = pow(10, n);
printf("%d ", number / p);
number -= number / p * p;
}
printf("\n");
}
int main(int argc, char *argv[]) {
print_number(1);
print_number(12);
print_number(123);
print_number(1234);
print_number(12345);
print_number(1234567);
print_number(12345678);
print_number(123456789);
return 0;
}
';
sprintf_s(strNumber, "%d", number);
int i = 0;
while(strNumber[i] != '#include <stdio.h>
int main ()
{
int a, b, c, d, e;
printf("Write a number of four figures\n");
scanf("%d", &a);
printf("Your number is:\n");
b = (a - (a % 1000)) / 1000;
c = ((a - (a % 100)) / 100) - b * 10;
d = ((a - (a % 10)) / 10) - b * 100 - c * 10;
e = (a - b * 1000 - c * 100 - d * 10);
printf("%d\t%d\t", b, c);
printf("%d\t", d);
printf("%d", e);
return 0;
}
')
printf("%c ", strNumber[i++]);
回答by Leonardo Herrera
This only works for unsigned integers:
这仅适用于无符号整数:
##代码##
