Mais uma duvida de C.

romanu

Power Member
Como se passa de um array de caracteres bidimensional para array de inteiros bidimensional.

exemplo:

char str[3][20] = {{"13 12 4 32 12"},{"3 5 82 9 1"},{"12 65 5 4 21"}}; /*separador é o "espaço" */

para

int num[3][5] = {{13,12,4,32,12},{3,5,82,9,1},{12,65,5,4,21}};


Obrigado

edit: ta melhor? :p
 
Última edição:
Queres converter uma string para um numero tipo:
"111" -> 111 ?

Ou (pelo exemplo que tu dás) queres converter uma serie de caracteres que não são mais que numeros que ocupam 1 byte? Queres copiar esses valores de 1 bytes para ocuparem 4 bytes.
Isso é facil basta fazer um for encadeado. Tipo:

for(int i = 0; i < 3; i++) for (int j = 0; j < 5; j++) intArray[j] = charArray[j];
 
Isto foi o que consegui até agora e não está nada famoso, se me poderem dar uma ajudinha agradecia.

Código:
#include<stdio.h
#include<stdlib.h>

#define	MAX	70

char str[3][MAX]={{"13 12 4 32 12"},{"3 5 82 9 1"},{"12 65 5 4 21"}}; /*separador é o "espaço" */
int num[3][MAX] = {{13,12,4,32,12},{3,5,82,9,1},{12,65,5,4,21}};





int main ()
{

int intArray[3][MAX];
int i,j,k,x,z=0;
char temp[2];
for (i=0;i<3;i++)
{	for (j=0; j<MAX;j++)
	{	if (str[i][j] == ' ' || str[i][j] == '\0' )
			for (k=0, x=j-2; k<2 ;k++,x++)
				temp[k]=str[i][x];
			intArray[i][z]=atoi(temp);
			z++;
	};		
};
for( i = 0; i < 3; i++)
	{for ( j = 0; j < 5; j++)
		printf("%d ",intArray[i][j]);
	printf("\n");}
return 0;
}


Obrigado
 
romanu disse:
pois ja pensei no atoi ... mas tou com dificuldades em implementar isso

a maior dificuldade é contornar o elemento sepadador (space). o resto é com atoi(). pegas numa linha da matriz e passas pra uma string temporaria. a partir dai é so brincar com strcat() e strtok(). :)

[[]]
 
romanu disse:
Karmack esqueces-te k tenho um separador (o espaço) ... e ao fazer isso passa pa codigo ASCII

Não tinha reparado no nas aspas e no espaço. Li aquilo à pressa.

Como são 5 numeros em cada string podes usar o sscanf. Tipo:
for(int i = 0; i < 5; i++)
sscanf(stringArray, "%d %d %d %d %d", (numeroArray + i * j + 0), (numero + i * j + 1), (numero + i * j + 2), (numero + i * j + 3), (numero + i * j + 4))
 
Obrigado pelas sugestões.

Karmack, essa solução so funciona para um array de caracters de 5 numeros.

O meu trabalho é sobre imagens PNM, redimensionar, colar, etc ... O tamanho das imagens (array) é variavel. Lidas apartir de um ficheiro (string), faço a conversão para int para ser mais facil manipular as imagens.

Obrigado novamente
 
Alguém poderá dizer-me pk é k isto não funciona?


Código:
#include<stdio.h>
#include<string.h>

#define	MAX	70

char str[3][MAX]={{"13 12 4 32 12"},{"3 5 82 9 1"},{"12 65 5 4 21"}}; /*separador é o "espaço" */
int num[3][MAX] = {{13,12,4,32,12},{3,5,82,9,1},{12,65,5,4,21}};





int main ()
{

int intArray[3][MAX];
int i,j,k=1,z=0;
char *token = NULL;
for (i=0; i<3;i++)
	{token= strtok( str[i], " " );
	 while( token )
    		{
        	intArray[i][z]=atoi(token);
		token = strtok( NULL, " " );
        	intArray[i][k] = atoi(token);
		z= z+2;
		k= k+2;
                }
	}

for( i = 0; i < 3; i++)
	{for ( j = 0; j < 5; j++)
		printf("%d ",intArray[i][j]);
	printf("\n");}
return 0;

}
 
Back
Topo