Código: Seleccionar todo

#include <stdio.h>
#include <string.h>

/***********************************
* Coder: Linkgl                    *
* Funcion:                         *
* Substr(cadena, inicio, longitud) *
* Indetectables.net/foro           *
* Fecha:17/12/10                   *
***********************************/
char *substr(char * szCadena,int izInicio,int izLongitud)
{
  int i;
  char szNueva[256]="";
  for(i=izInicio;i<izInicio+izLongitud;i++)
    szNueva[strlen(szNueva)]=szCadena[i];
  printf("%s",szNueva);
  //return szNueva;
}

int main ()
{
  substr("http://indetectables.net/foro/",7,13); //Devuelve "indetectables" sin comillas
  getchar();
  return 0;
}

Simula a substr de php o python, o mid de vb6.
//mHmm..
Aqui te dejo la funcion que cree yo hace mucho tiempo:

Código: Seleccionar todo

char * Mid(char * cadena,int inicio,int fin)
{
    int i;
    int x;
    char * devolucion = malloc(strlen(cadena));
 
    for (i=inicio,x=0;i<fin;i++,x++)
    {
        devolucion[x] = cadena[i]; 
    }
 
    return devolucion;
}
salu2!
Imagen
aquí os dejo una versión del Substr de linkgl hecha por mí, utilizando la idea de Drinky94 de usar malloc() para que no quede restringida a 256 caracteres la nueva cadena y creando 2 condiciones de parada del bucle para que en ningún caso se salga fuera de rango. en la función main() están los casos "extremos" como ejemplos junto a la cadena original.

Código: Seleccionar todo

//substr_r007.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/******************************************
* Coder: R-007                            *
* Function:                               *
* Substr(cadena, inicio, longitud)        *
* Substr modification, original by linkgl *
* Indetectables.net/foro                  *
* Date: 18/12/2010                        *
******************************************/

char *substr(char * szCadena,int izInicio,int izLongitud)
{
  int i= 0;
  int len = 0;
  //strLen(szNueva) 'is' len, if izLongitud > 0
  if (izLongitud > 0) len = izLongitud;
  char * szNueva = malloc(len);//requires stdlib.h
  while ((i+izInicio < strlen(szCadena))&&(i<len)){
    szNueva[i]=szCadena[i+izInicio];
    i++;
  } 
  return szNueva;
}

int main ()
{
  char* original = "http://indetectables.net/foro/";
  char* example1 = substr(original,7,-10);
  char* example2 = substr(original,7, 30);
  char* example3 = substr(original,7, 13);
  printf("SUBSTR BY R-007:");
  printf("\n----------------------------");
  printf("\noriginal:%s",original);  //returns "http://indetectables.net/foro/"
  printf("\nsubstr1:%s",example1);  //returns ""
  printf("\nsubstr2:%s",example2);  //returns "indetectables.net/foro/"
  printf("\nsubstr3:%s",example3);  //returns "indetectables"
  printf("\n----------------------------");
  getchar();
  return 0;
}

//eof substr_r007.c
lo mismo estaba pensando yo Seritx, esto debería ir entero a la sección C/C++, pero no podía esperar a que lo movieran antes de responder el post xdd
En el source que yo publiqué en win me tiro un error al retornar la variable (si es que activas el return) solo tienes que declarar la szNueva como global para reservar el espacio jeje muy buenos los otros dos, estos posts sirven mucho de retroalimentación me gusta cuando cada quien aporta aunque sea un poquitito, drinky se ve que eres un gran programador, estudias la uni o algo por el estilo? saludos!
//mHmm..
ese return te tiraba error porque szNueva la declaraste de tipo char[] y no char* como indica la cabecera ;)
Responder

Volver a “Fuentes”