Ir ao conteúdo

Posts recomendados

Postado

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
Postado

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 3
  • Obrigado 1
Postado

@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

Postado
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 1
Postado

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 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...