Página 1 de 1

[Source]Substr o Mid en C by linkgl

Publicado: 17 Dic 2010, 19:53
por linkgl

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.

Re: Substr o Mid en C by linkgl

Publicado: 17 Dic 2010, 20:01
por mDrinky
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!

Re: Substr o Mid en C by linkgl

Publicado: 18 Dic 2010, 14:40
por R-007
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

Re: Substr o Mid en C by linkgl

Publicado: 18 Dic 2010, 15:08
por STX
esto no tendria que estar aqui: foro/viewforum.php?f=36 ?

Salu2

Re: Substr o Mid en C by linkgl

Publicado: 18 Dic 2010, 15:15
por R-007
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

Re: [Source]Substr o Mid en C by linkgl

Publicado: 20 Dic 2010, 03:01
por linkgl
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!

Re: [Source]Substr o Mid en C by linkgl

Publicado: 21 Dic 2010, 00:04
por R-007
ese return te tiraba error porque szNueva la declaraste de tipo char[] y no char* como indica la cabecera ;)