Ahí le doy un arreglo al código:
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){
por=&cadprincipal[po];
}
int abs;
if(extrac >= 0) abs = extrac;
else abs = -extrac;
for(int i=0;i<abs;i++,carac++){
*carac=*por;
if(extrac >=0) por++;
else por--;
}
*carac = 0;
carac -= abs;
printf("\n\nCadena principal: %s",cadprincipal);
printf("\nCadena final: %s",carac);
getch();
return 0;
}
Si se fija bien cambié unas cositas:
- en el último printf usted imprimía "por", lo cambié por "carac" porque ahí es donde está almacenando cada uno de los caracteres de la subcadena
- El for que había antes no tenía condicional de salida. Cambié todo ese for, de tal forma que lo recorriera "extrac" veces y fuera asignando en "carac" cada uno de los caracteres según fuera "extrac" positivo o negativo (substring hacia adelante o hacia atrás).
- Usé una variable adicional llamada "abs" donde guardo el valor absoluto de "extrac".
Habría muchas cosas para explicar sobre los punteros, si tiene alguna duda en específico no dude en preguntar.
Saludos.