linea - leer espacios en c
Insertar espacios entre los dÃgitos en C (6)
Como ''jamesdlin'' ha mencionado en su comentario, el enfoque de GMan funcionaría; sin embargo, tendrá que almacenarlo en un búfer para imprimir en el orden correcto (su algoritmo imprimirá "6 5 4 3 2 1" para la entrada 123456). En este punto, diría que sería mucho más simple usar sprintf como ''sugerido'' en su respuesta (si esto no es una asignación de clase de algoritmo, por supuesto).
En mi opinión, la forma más sencilla de hacerlo sería usar la recursión, de esta manera puede imprimir los dígitos en el orden correcto sin utilizar los búferes.
La implementación recursiva es muy 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;
}
Entrada:
-78900456
Salida:
- 7 8 9 0 0 4 5 6
EDITAR : Gracias a Steve Jessop, quien me sugirió un algoritmo correcto para enteros positivos mientras estaba fuera. Cambié el método anterior para imprimir correctamente para todas las entradas (positivas y negativas), sin el último espacio.
Tenga en cuenta que podemos evitar verificar los valores negativos en cada recursividad, haciendo la comprobación solo una vez (en la función principal o donde sea) pero no lo escribí porque perderíamos más en claridad que en rendimiento.
¿Cómo tomaría un número como 123456
y lo imprimiría como 1 2 3 4 5 6
?
Esto solo funciona para enteros sin signo:
#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;
}
Un método común sería extraer cada dígito y luego imprimir ese dígito. No le daré el código, pero es la versión implementada de:
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 */
Esto será al revés. Lo dejaré como un ejercicio para que arregles eso. (Sugerencia: en el ciclo, coloque el resultado en una matriz de caracteres, y cuando termine comience en el último índice de la matriz e imprima al revés).
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'');
int number = 123456;
char strNumber[64];
strNumber[0] = ''/0'';
sprintf_s(strNumber, "%d", number);
int i = 0;
while(strNumber[i] != ''/0'')
printf("%c ", strNumber[i++]);