Ver Mensaje Individual
  #6 (permalink)  
Antiguo 28/03/2012, 12:48
cesar_casla
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 10 meses
Puntos: 94
Respuesta: Dividir una cadena en 2 matrices

Hola! al final termine usando strtok ya que la conoces y sabes como usarlo. Solo que yo lo use para dividir la cadena en dos:
cadena 1: "1,2,3|4,5,6|7,8,9"
cadena 2: "9,8,7|6,5,4|3,2,1"
Otra cosa importante que habia que hacer era convertir esos numeros en enteros, para eso use atoi

T dejo el codigo:
Código C:
Ver original
  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5.  
  6. #define FILA 3
  7. #define COLUMNA 3
  8.  
  9. void func(char *vec,int mat[][COLUMNA]);
  10. void imprimir(int mat[][COLUMNA]);
  11.  
  12. int main(void)
  13.  
  14. {
  15.     char vec[]="1,2,3|4,5,6|7,8,9@9,8,7|6,5,4|3,2,1";
  16.     int mat1[FILA][COLUMNA];
  17.     int mat2[FILA][COLUMNA];
  18.     int i,j;
  19.    
  20.     char *s=strtok(vec,"@");
  21.     // la primera llamada a strtok va a devolver esta cadena "1,2,3|4,5,6|7,8,9"
  22.     func(s,mat1);
  23.     while((s=strtok(NULL,"@"))!=NULL)
  24.     // la segunda llamada a strtok va a devolver esta cadena "9,8,7|6,5,4|3,2,1"
  25.     func(s,mat2);
  26.    
  27.     imprimir(mat1);
  28.     printf("\n");
  29.     imprimir(mat2);
  30.    
  31.     getchar();
  32.     return 0;
  33. }                                  
  34.  
  35. void func(char *vec,int mat[][COLUMNA])
  36. {
  37.      int i,j=0,k;
  38.      
  39.     for(i=0;i<FILA;i++) {
  40.           for(k=0;vec[j]!='|';j++) { // el for termina cuando encuentra '|'
  41.              if(vec[j]=='\0') // si es fin de linea sale del for
  42.                break;
  43.              if(!isdigit(vec[j])) // si no es un digito continua al siguiente ciclo
  44.                 continue;
  45.              else { // es un digito se guarda en la matriz
  46.                mat[i][k]=atoi(&vec[j]); // convierto el caracter numero a su representacion en entero
  47.                k++;
  48.              }
  49.            }
  50.            j++;
  51.     }
  52. }
  53.  
  54. void imprimir(int mat[][COLUMNA])
  55. {
  56.      int i,j;
  57.      
  58.      for(i=0;i<FILA;i++) {
  59.     for(j=0;j<COLUMNA;j++)
  60.     {
  61.                           printf("%d ",mat[i][j]);
  62.                           }
  63.                           printf("\n");
  64.     }
  65. }

El codigo esta comentado, si no lo entendes cualquier cosa pregunta. T dejo hacer la parte de multiplicacion de las matrices

Saludos

PD: la funcion imprimir solo esta para verificar si estaba bien lo que hacia