Ver Mensaje Individual
  #5 (permalink)  
Antiguo 07/10/2009, 21:03
joticajulian
 
Fecha de Ingreso: septiembre-2009
Mensajes: 56
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: problemas con punteros

Hola,
la variable "abs" la usé para poder hacer el contador del for cuando extrac es negativo. Suponiendo que:
- extrac=5, entonces abs=5 y el for se hace de 0 a 5
- extrac= - 5, entonces abs=5 y de igual forma el for hace un conteo hasta 5, que es lo que quiero, simplemente que ya como extrac es negativo recorro el arreglo alrevés pero de todas formas lo hago 5 veces. Por eso uso el abs, para tomar el valor absoluto.

A continuación pongo el código otra vez, con algunas líneas comentadas para explicar lo que se hace.

Código:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define max 50
int po,extrac,lcf,i;
char *por;
int main (){
   char cadprincipal[max], cadfinal[max];
   char *carac=cadfinal;
   printf("\tUtilizando apuntadores, realice una función que extraiga\n una sub-cadena de una cadena a partir de una posición determinada\n\t(el resultado debe quedar en otra cadena)");
   printf("\n\nDigita la cadena princial : ");
   gets(cadprincipal);
   printf("Digita la posicion del caracter: ");
   scanf("%d", &po);
   printf("Digita el numero de caracteres que se extraeran: ");
   scanf("%d", &extrac);
   
   if (po>=0){
      /* en el puntero "por" se guarda la dirección
       * de memoria del caracter de donde se va
       * a empezar a extraer la subcadena
       */
      por=&cadprincipal[po];
   }
   
   int abs;
   
   if(extrac >= 0) abs = extrac;
   else abs = -extrac;
   

   /* a continuación se hace un proceso
    * "abs" veces
    * no se hace "extrac" veces, porque
    * éste puede ser negativo
    */
   for(int i=0;i<abs;i++,carac++){

         /* dentro de cada una de las
          * posiciones de "carac" se va
          * poniendo lo que apunta "por"
          */

         *carac=*por;

         /* si "extrac" es positivo, entonces
          * aumento "por" para caminar hacia adelante
          * si "extrac" es negativo, entonces
          * disminuyo "por" para caminar hacia atrás
          */
         if(extrac >=0) por++;
         else por--;
   }   

   //pongo el caracter NULL, que indica fin de cadena   
   *carac = 0;

   /*como el puntero "carac" lo estuve moviendo en el for
    *lo devuelvo a donde apunta el inicio de cadena
    */
   carac -= abs;
          
   printf("\n\nCadena principal: %s",cadprincipal);
   printf("\nCadena final: %s",carac);
   getch();
   return 0;
}
Te recomiendo la siguiente página, ahí hay un buen curso de programación. Dejo el link de "punteros".
http://c.conclase.net/curso/index.php?cap=012

Saludos.