Ir ao conteúdo
  • Cadastre-se
Karinac3

C Converter int para um vetor char

Recommended Posts

Boa noite pessoal, estou aprendendo alocação dinâmica e em um exercício recebido preciso pegar um número que é recebido em uma função como int e colocar cada dígito dentro de um vetor char separado por espaços. Depois tenho que retornar esse vetor para a função main.

Por exemplo: Recebo = int 432 e devolvo char 4 3 2.

A minha dificuldade está em colocar o número que eu recebo como inteiro dentro de um vetor do tipo char.

A única função que eu conhecia que transforma int em char é a snprintf, porém não está funcionando neste caso. Existe outra função que eu possa usar?

 

Segue o que eu tentei fazer:

char* separa (int numero){
    if (numero >=1 || numero<= 32767){
        int c=0, b=10, i, recebe_numero[200];
        char *ptr_separa = (char*) malloc(2*sizeof(numero));

        if(ptr_separa==NULL)return NULL;

        while (numero !=0){
            c = resto(numero, b);
            numero = quociente(numero, b);
            for (i=sizeof(numero); i<=0; i--){
                recebe_numero[i] = c + 0x30;
                ptr_separa[i] = recebe_numero[i];
                ptr_separa[i+1] = " ";
            }
        }
    }
    free(ptr_separa);
return ptr_separa;
}

 

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

O ideal na minha visão seria fazer usando os números da Tabela ASCII.

 

Os números(como caracteres) na Tabela ASCII começam do 48 e vão até 57, de 0 a 9, respectivamente. Então, você pode usar cada número inteiro somado com 48 e irá obter o mesmo número mas em caractere.

 

Por exemplo:

int num = 5;

char numC = (char)(num + 48); //O resultado dá 53, que é o correspondente do caractere 5 na Tabela ASCII

 

  • Curtir 4
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Karinac3 Olá. Daria para usar a função itoa, que converte um número p string (vetor de caracteres). Apenas um exemplo:

#include <stdio.h>
#include <stdlib.h>

char *num_to_str(int number, int size) {
    char *str = NULL;
    str = malloc((size + 1) * sizeof(char)); 
    itoa(number, str, 10); // aqui 10 significa decimal
    return str;
}

int main(void) {

    char *str_int = NULL;
    int num = 123;

    str_int = num_to_str(num, 3); // 3 é a quantidade de dígitos

    printf("%s\n", str_int);

    free(str_int);

    str_int = NULL;

    return 0;
}

De posse da string onde o valor dela é o número informado: "123", teria q criar a lógica para inserir os espaços antes de retorná-la

Referência: https://fresh2refresh.com/c-programming/c-type-casting/c-itoa-function/

Mas com a função sprintf já se tem o mesmo resultado:

#include <stdio.h>

int main(void) {

    char str_int[10];
    int num = 123;

    sprintf(str_int, "%d", num);

    printf("%s\n", str_int);

    return 0;
}

Espero q ajude

Editado por giu_d
Correção no comentário
  • Curtir 4

Compartilhar este post


Link para o post
Compartilhar em outros sites

@iHollyZinhO Nunca precisei usar a tabela Ascii, mas me tira uma dúvida. Quando a usamos precisamos declarar uma biblioteca ou bastaria apenas somar os valores como voce fez ai .(claro, tendo o conhecimento da mesma)?

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 horas atrás, Josesousa disse:

@iHollyZinhO Nunca precisei usar a tabela Ascii, mas me tira uma dúvida. Quando a usamos precisamos declarar uma biblioteca ou bastaria apenas somar os valores como voce fez ai .(claro, tendo o conhecimento da mesma)?

Apenas somar os valores basta.

 

Fica como dica o seguinte: se você esquecer os valores, só imprimir o caractere como inteiro e você descobre o valor na tabela ASCII.

Ex: printf("%d", '1');

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade se entender que caracteres não números, não precisa consultar a tabela ASCII:

int num = 5;

char numC = (char)(num + '0');

Assim não precisa saber o número decimal correspondente do caractere na tabela ASCII.

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×