2011-01-17 32 views
7

Tengo una matriz de números enteros, por ejemplo int example[5] = {1,2,3,4,5}. Ahora quiero convertirlos en matriz de caracteres usando C, no C++. ¿Cómo puedo hacerlo?Convertir matriz int a matriz de caracteres

+2

¿Qué representa para 1,2,3,4,5? ¿Cuáles son algunas conversiones razonables que está esperando? Por favor agregue un ejemplo a su pregunta. – Aamir

+0

puede usar sprintf – Marii

+0

Es un error tipográfico ... su ejemplo int [5] – Allwyn

Respuesta

8

Dependiendo de lo que realmente quiere, hay varias posibles respuestas a esta pregunta: ¿

int example[5] = {1,2,3,4,5}; 
char output[5]; 
int i; 

copia directa caracteres de control dando ASCII 1 - 5

for (i = 0 ; i < 5 ; ++i) 
{ 
    output[i] = example[i]; 
} 

caracteres '1' - '5 '

for (i = 0 ; i < 5 ; ++i) 
{ 
    output[i] = example[i] + '0'; 
} 

cadenas que representa el 1 - 5.

char stringBuffer[20]; // Needs to be more than big enough to hold all the digits of an int 
char* outputStrings[5]; 

for (i = 0 ; i < 5 ; ++i) 
{ 
    snprintf(stringBuffer, 20, "%d", example[i]); 
    // check for overrun omitted 
    outputStrings[i] = strdup(stringBuffer); 
} 
+1

¿Qué pasa si el número entero es más grande que '9'? Los enteros superiores a '10' no se convertirán al formato char. – Stallman

1

puede convertir un solo dígito entero en el carácter correspondiente usando esta expresión:

int intDigit = 3; 
char charDigit = '0' + intDigit; /* Sets charDigit to the character '3'. */ 

Tenga en cuenta que esto sólo es válido, por supuesto, de un solo dígito. Extrapolar lo anterior para trabajar contra matrices debe ser sencillo.

0

Necesita crear la matriz, porque sizeof(int) es (casi seguro) diferente de sizeof(char)==1.

Tienen un ciclo en el que se hace char_example[i] = example[i].


Si lo que desea es convertir un entero en una cadena que sólo podría resumir el número entero a '0' pero sólo si está seguro de que su número entero entre 0 y 9, de lo contrario necesitarás para usar algo más sofisticado como sprintf.

2
#include <stdio.h> 

int main(void) 
{ 
    int i_array[5] = { 65, 66, 67, 68, 69 }; 
    char* c_array[5]; 

    int i = 0; 
    for (i; i < 5; i++) 
    { 
     //c[i] = itoa(array[i]); /* Windows */ 

     /* Linux */ 
     // allocate a big enough char to store an int (which is 4bytes, depending on your platform) 
     char c[sizeof(int)];  

     // copy int to char 
     snprintf(c, sizeof(int), "%d", i_array[i]); //copy those 4bytes 

     // allocate enough space on char* array to store this result 
     c_array[i] = malloc(sizeof(c)); 
     strcpy(c_array[i], c); // copy to the array of results 

     printf("c[%d] = %s\n", i, c_array[i]); //print it 
    } 

    // loop again and release memory: free(c_array[i]) 

    return 0; 
} 

Salidas:

c[0] = 65 
c[1] = 66 
c[2] = 67 
c[3] = 68 
c[4] = 69 
+0

Su respuesta solo funcionará para números hasta 999, después de eso comenzará a truncar dígitos - INT_MAX para un entero de complemento de 32 bits 2 es 2147483647 que como más de 3 dígitos (uno de los cuatro se toma con ''\ 0 '') – JeremyP

+0

@JeremyP Veo a qué te refieres, gracias. – karlphillip

0

En C puro lo haría así:

char** makeStrArr(const int* vals, const int nelems) 
{ 
    char** strarr = (char**)malloc(sizeof(char*) * nelems); 
    int i; 
    char buf[128]; 

    for (i = 0; i < nelems; i++) 
    { 
     strarr[i] = (char*)malloc(sprintf(buf, "%d", vals[i]) + 1); 
     strcpy(strarr[i], buf); 
    } 
    return strarr; 
} 

void freeStrArr(char** strarr, int nelems) 
{ 
    int i = 0; 
    for (i = 0; i < nelems; i++) { 
     free(strarr[i]); 
    } 
    free(strarr); 
} 

void iarrtostrarrinc() 
{ 
    int i_array[] = { 65, 66, 67, 68, 69 }; 
    char** strarr = makeStrArr(i_array, 5); 
    int i; 
    for (i = 0; i < 5; i++) { 
     printf("%s\n", strarr[i]); 
    } 
    freeStrArr(strarr, 5); 
} 
+0

Un malloc-cast no es 'C puro', es C++. – user411313

Cuestiones relacionadas