1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Mais uma duvida de C.

Discussão em 'Programação' iniciada por romanu, 2 de Maio de 2005. (Respostas: 10; Visualizações: 757)

  1. romanu

    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: 2 de Maio de 2005
  2. redalert

    redalert Folding Member

    boas.

    axo k a unica maneira é aplicar atoi() a todos os elementos/copiar para uma nova matriz.

    [[]]
     
  3. HiGhVoIcE

    HiGhVoIcE Power Member

    já agora lembra-te que comentarios com // não pertencem à norma ANSI
     
  4. romanu

    romanu Power Member

    pois ja pensei no atoi ... mas tou com dificuldades em implementar isso
     
  5. Karmack

    Karmack Power Member

    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];
     
  6. romanu

    romanu Power Member

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

    romanu Power Member

    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
     
  8. redalert

    redalert Folding Member

    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(). :)

    [[]]
     
  9. Karmack

    Karmack Power Member

    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))
     
  10. romanu

    romanu Power Member

    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
     
  11. romanu

    romanu Power Member

    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;
    
    }
     

Partilhar esta Página