• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

magalas

Converter string para int

8 mensagens neste tópico

Boa noite,

Estou a tentar converter uma string para um vector de inteiros, mas dá erro.

 

v_num[conta] = atoi(s_numero[conta]);

Mas dá erro:  [Warning] passing arg 1 of `atoi' makes pointer from integer without a cast

Não consigo resolver. A finalidade era converter uma string (composta por um numero inteiro) e converter cada algarismo desse numero para um vector de numeros inteiros (ficando 1 algarismo em cada elemento do vector).

Obrigado pela ajuda.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A função atoi só converte uma string constituida por números para um número inteiro.

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

int main(void) {
char str[20];
fgets(str ,20, stdin);

int num = atoi(str);
if(num == 0) {
	exit(-1);
}

int arrsz = strlen(str)-1;
int* arr = malloc(arrsz * sizeof(int));

for(int i = arrsz-1; num; num /= 10, i--) {
	arr[i] = num%10;
}

for(int i = 0; i < arrsz; i++) printf("%d ", arr[i]);
putchar('\n');

free(arr);

return 0;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado pela ajuda Triton, mas não está a funcionar.

O problema da conversão do número, em que acha o resto e divide o numero10, está no problema dos zeros.

Eu queria que se a string tiver zeros (0) a esquerda do numero, eles não sejam eliminados, esses zeros terão de ser colocados no vector também.

Ex.  String "00134"    ->        vector0[0], vector1[0], vector2[1], vector3[3], vector4[4]

Este é o meu problema.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas então, isso não pode ser mantido num int.

Se experimentares fazer isto

int c = 001;

Ele guarda-te 1, e não 001, que numericamente é o mesmo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A tua 1ª ideia era a mais acertada. Mas em vez de

v_num[conta] = atoi(s_numero[conta]);

utiliza

v_num[conta] = s_numero[conta] - '0';

Convém é verificares se cada s_numero[conta] está entre '0' e '9'.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado pela ajuda, já funciona. Era isso mesmo TheDark, já rola.

Obrigado a todos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Percebeste o que está a acontecer ali? Está a ser subtraído a cada algarismo o valor do caracter '0' o que, dado que os algarismos estão todos seguidos na tabela ASCII, resulta no valor numérico de cada algarismo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, agora percebi. Não tinha pensado nesse grande pormenor, lol.

Obrigado pela ajuda.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora