Ir ao conteúdo

C função externa para converte uma array


Ir à solução Resolvido por arfneto,

Posts recomendados

Postado

o código é para converte uma array  de char -->  char zr2_ArrayB[] = {'1','2','4','5'};

em uma Array Numérica Exemplo  int zr2_TacinMainArray = {'1','2','4','5'}; MAS !!!!  Através   de uma Função

 

O código passa  char zr2_ArrayB[] = {'1','2','4','5'}; para a função  organizar uma array numérica e devouve-la a main

 

o meu probema é ate que simples não funciona dessa maneira ai 🤣 falta alguma logica 

 

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

 
int main (void){

    printf(" \n ----------------------- Mano III ----------------------- \n ");
	int Tr_Array_Char_In_Number(char zr2_ArrayInside);
	char zr2_ArrayB[] = {'1','2','4','5'};
	// int *prt=zr2_ArrayB;

	int zr2_TacinMainArray[(strlen(zr2_ArrayB))];
	zr2_TacinMainArray = Tr_Array_Char_In_Number(zr2_ArrayB);
	printf("\n Fora = %d %d %d  \n ",zr2_TacinMainArray[0],zr2_TacinMainArray[1],zr2_TacinMainArray[2]);
	
    return(0);
};



//  ------------------------------------- Funçao : Mano III -----------------------------------------------------------
int Tr_Array_Char_In_Number(char zr2_ArrayInside[]){
	
	int zr2_ArrayNumberInside[5];
	int zr2_ppiz; // contador
	
	printf("Chegou aqui I");
	
	for(zr2_ppiz=0; zr2_ArrayNumberInside[zr2_ppiz] != (strlen(zr2_ArrayInside))-1 ; zr2_ppiz++){
    	if( zr2_ArrayInside[zr2_ppiz] == ',') { printf("Nadaa");};   
		if( zr2_ArrayInside[zr2_ppiz] == '.') { printf("Nadaa");};
    	if( zr2_ArrayInside[zr2_ppiz] == '0') { zr2_ArrayNumberInside[zr2_ppiz] = 0; };    
		if( zr2_ArrayInside[zr2_ppiz] == '1') { zr2_ArrayNumberInside[zr2_ppiz] = 1; };
    	if( zr2_ArrayInside[zr2_ppiz] == '2') { zr2_ArrayNumberInside[zr2_ppiz] = 2; };
		if( zr2_ArrayInside[zr2_ppiz] == '3') { zr2_ArrayNumberInside[zr2_ppiz] = 3; };
    	if( zr2_ArrayInside[zr2_ppiz] == '4') { zr2_ArrayNumberInside[zr2_ppiz] = 4; };
		if( zr2_ArrayInside[zr2_ppiz] == '5') { zr2_ArrayNumberInside[zr2_ppiz] = 5; };
    	if( zr2_ArrayInside[zr2_ppiz] == '6') { zr2_ArrayNumberInside[zr2_ppiz] = 6; };
		if( zr2_ArrayInside[zr2_ppiz] == '7') { zr2_ArrayNumberInside[zr2_ppiz] = 7; };
    	if( zr2_ArrayInside[zr2_ppiz] == '8') { zr2_ArrayNumberInside[zr2_ppiz] = 8; };    
		if( zr2_ArrayInside[zr2_ppiz] == '9') { zr2_ArrayNumberInside[zr2_ppiz] = 9; };
	   // else{ printf("apresentou problemas");};
	};
	
	printf("\n Dentro !!! A[0]= %d A[1]= %d A[2]= %d  \n ",zr2_ArrayNumberInside[0],zr2_ArrayNumberInside[1],zr2_ArrayNumberInside[2]); // Testando
	//return(0); // Testando
	return zr2_ArrayNumberInside;
};



int Tr_Char_In_Numberb( ){

};

 

  • Amei 1
Postado

Isso está muito confuso e não precisa. Se quer converter e tem os dois arrays escreva o simples

 

    int converte( char origem[], int destino[]);

 

Se tem apenas um pode alocar o vetor novo  e retornar escrevendo
 

    int* converte( char origem[]);

 

 

  • Curtir 1
  • Obrigado 1
Postado

@arfneto  não conhecia essa forma obs: ainda estou tentando entender

2 horas atrás, arfneto disse:
int converte( char origem[], int destino[]);


não estou conseguindo entender 

você pode me ajudar na sintaxe não estou conseguindo fazer rodar

# include <stdio.h>
# include <stdlib.h> 
int main (void){
 
	char zr2_ArrayB[] = {'1','3','4','5'};
	int zr2_ArrayA[5];
	
		
	
	//--------------- I  ---------------
	 int converte( char zr2_ArrayB[1], int zr2_ArrayA[1]);
	 printf("\n Chegou aqui I = %d \n",zr2_ArrayA[1]);
	// Resultado No terminal  = 4202107
	
	
	//--------------- II  ---------------
	  int* converte( char zr2_ArrayB[1]);
	  zr2_ArrayB[1] = zr2_ArrayB[1]+25;  // 2+25
	  printf("\n Chegou aqui I %d \n",zr2_ArrayB[1]);
	// Resultado No terminal  = 51
	
	//--------------- III  ---------------
	  	zr2_ArrayA[1]= int* converte( char zr2_ArrayB[1]);
		printf("\n Chegou aqui I %d \n",zr2_ArrayA[1]);
	// Resultado No terminal  = N�o Rodou
	
	
	//--------------- IV  ---------------
	 int converte( char zr2_ArrayB[1];
	 printf("\n Chegou aqui I %d \n",converte[1]);
	// Resultado No terminal  = N�o Rodou
	
	
	//--------------- Lixo: resto de códigos  ---------------
	// printf("\n Chegou aqui I %d \n",int zr2_ArrayA[1]);
	// zr2_ArrayA[1] = int* converte( char zr2_ArrayB[]);
	// printf("\n Chegou aqui I %d \n",int zr2_ArrayA[1]);

	//--------------- lixo III  ---------------
	// zr2_ArrayB[1] = atoi((zr2_ArrayB[1]));
	// zr2_ArrayB[1] =
	// itoa(zr2_ArrayA[1] , zr2_ArrayB[1], 10 );
	// à toa( variavel_int_destino ,  Variavel_char_Origen , Sistema Num�rico<10> ) ;
	
	// printf("\n Chegou aqui I = %d \n",zr2_ArrayA[1]);
	
return(0);
}


 

  • Obrigado 1
  • Solução
Postado

Note que na prática certamente seria preciso um parâmetro com o tamanho do array. Se o tamanho é sempre 5 deveria estar na declaração [5] e não [ ] 

 

Isso é só uma prova de conceito para ver como escrever.

 

Eis um exemplo de como escrever:

 

saida

 

Vetor de char original:
        Valores em char: '1'  '2'  '3'  '4'  '8'
Vetor de 'int' convertido:
        Valores em decimal: 1  2  3  4  8
Vetor convertido (versão de um parametro):
        Valores em decimal: 1  2  3  4  8

 

Código

 

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

int* Converte(char[]);
int  converte(char origem[], int destino[]);
int  mostra_char(char[], const char*);
int  mostra_int(int[], const char*);

int main(void)
{
    char ent[5] = {'1', '2', '3', '4', '8'};
    int  sai[5] = {0};

    mostra_char((int*) ent, "Vetor de char original:");
    converte(ent, sai);
    mostra_int(sai, "Vetor de 'int' convertido:");
    int* outro = Converte(ent);
    mostra_int(
        outro, "Vetor convertido (versão de um parametro):");
    free(outro);  // apaga
    return 0;
}

int* Converte(char origem[])
{
    int* destino = (int*)malloc(5 * sizeof(int));
    if (destino == NULL) return NULL;

    for (int i = 0; i < 5; i += 1)
        *(destino + i) = origem[i] - '0';
    return destino;
}

int converte(char origem[], int destino[])
{
    for (int i = 0; i < 5; i += 1)
        destino[i] = origem[i] - '0';
    return 0;
}

int mostra_char(char v[], const char* tit)
{
    if (tit != NULL) printf("%s\n", tit);
    printf("\tValores em char: ");
    for (int i = 0; i < 5; i += 1) printf("'%c'  ", v[i]);
    printf("\n");
    return 0;
}

int mostra_int(int v[], const char* tit)
{
    if (tit != NULL) printf("%s\n", tit);
    printf("\tValores em decimal: ");
    for (int i = 0; i < 5; i += 1) printf("%d  ", v[i]);
    printf("\n");
    return 0;
}

 

 

Sobre seu código

 

36 minutos atrás, IzeraXD disse:
char zr2_ArrayB[] = {'1','3','4','5'};

 

porque só tem 4?

 

Está muito confuso como escreveu. Não entendi. Mas não está certo.

  • Curtir 1
  • Obrigado 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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!