obtener un substring

Dudas sobre el C/C++ en general
Responder
Mensaje
Autor
Avatar de Usuario
2005saeros
Mensajes: 1
Registrado: 16/07/2005 11:00 pm

obtener un substring

#1 Mensaje por 2005saeros » 17/07/2005 3:53 pm

hola mi duda es si hay alguna funcion que obtenga un substring de una cadena por ejmplo que obtenga "ol" de hola

gracias por la ayuda

Avatar de Usuario
HEAVY
Mensajes: 72
Registrado: 07/03/2005 12:00 am

#2 Mensaje por HEAVY » 17/07/2005 4:11 pm

Pues hay muchas funciones de cadenas

http://c.conclase.net/librerias/libreria.php?lib=string

Aqui hay varia funciones aver cual te sirve para lo que deseas hacer
Si mi teoría es exacta, los alemanes dirán que soy alemán y los franceses que soy ciudadano del mundo. Pero si no, los franceses dirán que soy alemán, y los alemanes que soy judío.

Albert Einstein

Avatar de Usuario
rir3760
Mensajes: 7553
Registrado: 01/10/2004 11:00 pm
Ubicación: Mexico

#3 Mensaje por rir3760 » 18/07/2005 8:38 am

La biblioteca estandar de C no incluye una funcion similar a la funcion de Basic Mid(cadena, inicio, longitud) por lo que deberias de revisar la documentacion que acompaña a tu compilador para conocer si este incluye una funcion similar.

En caso contrario implementar nuestra propia version de la funcion Mid es relativamente facil, por ejemplo:

Código: Seleccionar todo

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

char *fn_Mid(const char *cadena, size_t inicio, size_t longitud);

int main(void)
{
   char *subcadena;
   
   if ((subcadena = fn_Mid("Hola, mundo", 0, 100)) != NULL){
      printf("fn_Mid(\"Hola, mundo\", 0, 100) = \"%s\"\n", subcadena);
      free(subcadena);
   }
   
   if ((subcadena = fn_Mid("Hola, mundo", 6, 5)) != NULL){
      printf("fn_Mid(\"Hola, mundo\", 6, 5) = \"%s\"\n", subcadena);
      free(subcadena);
   }
   
   if ((subcadena = fn_Mid("Hola, mundo", 100, 1)) != NULL){
      printf("fn_Mid(\"Hola, mundo\", 120, 1) = \"%s\"\n", subcadena);
      free(subcadena);
   }
   
   return EXIT_SUCCESS;
}

/* Devuelve la subcadena o NULL en caso de error */
char *fn_Mid(const char *cadena, size_t inicio, size_t longitud)
{
   char *subcadena, *aux;
   size_t i, j;
   
   /* Salir inmediatamente si la longitud es 0 */
   if (longitud == 0)
      return NULL;
   
   /* Verificar posicion de inicio */
   for (i = 0; i < inicio && cadena[i] != '\0'; i++)
      ;
   if (cadena[i] == '\0')
      return NULL;
   
   /* Reservar memoria y verificar resultado de malloc */
   if ((subcadena = malloc(longitud + 1)) == NULL)
      return NULL;
   
   /* Copiar subcadena */
   for (j = 0; j < longitud; j++)
      if ((subcadena[j] = cadena[i + j]) == '\0')
         break;
   subcadena[j] = '\0';
   
   /* Reajustar bloque de memoria */
   if ((aux = realloc(subcadena, j + 1)) == NULL){
      free(subcadena);
      return NULL;
   }else
      subcadena = aux;
   
   return subcadena;
}
Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

Alejandro_
Mensajes: 254
Registrado: 26/03/2005 12:00 am
Ubicación: Buenos Aires

#4 Mensaje por Alejandro_ » 18/07/2005 9:57 am

En C++ tienes la función substr(), miembro de basic_string:

Código: Seleccionar todo

basic_string 
substr(size_type pos = 0, size_type n = npos) const;
que devuelve una copia de la substring que comienza en la posición "pos", compuesta de los siguientes "n" caracteres.
Un ejemplo:

Código: Seleccionar todo

string saludo("hola");
cout << saludo.substr(1);  // desde la posición 1 hasta el final: "ola"
cout << saludo.substr(1,2); // desde la posición 1, dos caracteres: "ol"
Alejandro

Thalion83
Mensajes: 1
Registrado: 13/06/2019 12:01 pm

Re:

#5 Mensaje por Thalion83 » 13/06/2019 12:09 pm

rir3760 escribió:
18/07/2005 8:38 am
La biblioteca estandar de C no incluye una funcion similar a la funcion de Basic Mid(cadena, inicio, longitud) por lo que deberias de revisar la documentacion que acompaña a tu compilador para conocer si este incluye una funcion similar...
Me gusta esta respuesta, pero siempre hay que tener cuidado al utilizar memoria dinámica. Una forma más "segura" es enviar como parámetro también la cadena destino, de modo que el uso de la función sea totalmente independiente de la forma en que se ha declarado la variable de destino.

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 invitados