Obtener subcadena en C

Jinku Hu 12 octubre 2023
  1. Usa la función strncpy para obtener la subcadena en C
  2. Usar una función personalizada para obtener una subcadena en C
Obtener subcadena en C

Este artículo presenta varios métodos para obtener una subcadena en C.

Usa la función strncpy para obtener la subcadena en C

strncpy es parte de la función de la biblioteca de cadenas de C definida en el archivo de cabecera <string.h>. Copia el número dado de bytes de la cadena de origen al destino. strncpy toma tres parámetros - el char* de destino, el puntero de origen, y el número entero para denotar el número de bytes a copiar. Si el número de bytes especificado es mayor que el que contiene la cadena de origen, se almacenan bytes nulos adicionales en el destino.

La función strncpy devuelve el puntero a la cadena de destino; así, podemos encadenar la llamada a la sentencia printf para imprimir directamente la subcadena. El siguiente ejemplo demuestra cómo imprimir la primera subcadena de cuatro caracteres y luego la siguiente subcadena de 10 caracteres.

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

const char *tmp = "This string literal is arbitrary";

int main(int argc, char *argv[]) {
  char *str = malloc(strlen(tmp));

  printf("%s\n", strncpy(str, tmp, 4));
  printf("%s\n", strncpy(str, tmp + 5, 10));

  free(str) exit(EXIT_SUCCESS);
}

Producción :

This
string lit

Usar una función personalizada para obtener una subcadena en C

Alternativamente, podemos definir una función personalizada para strncpy y especificar una nueva interfaz de cuatro parámetros. En concreto, la función getSubstring tomará las cadenas destino y origen más dos enteros que especifican las posiciones inicial y final de los caracteres necesarios como subcadena. Tenga en cuenta que este prototipo de función no implementa una comprobación de errores adicional, sino que devuelve directamente el puntero char* pasado desde la llamada strncpy.

Al igual que en el ejemplo anterior, getSubstring también puede encadenarse a la función printf como argumento. Una advertencia con respecto a strncpy es que las cadenas de destino y origen no deben superponerse en la memoria. Además, el puntero de destino debe apuntar a un buffer lo suficientemente grande como para almacenar la cadena de origen.

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

const char *tmp = "This string literal is arbitrary";

char *getSubstring(char *dst, const char *src, size_t start, size_t end) {
  return strncpy(dst, src + start, end);
}

int main(int argc, char *argv[]) {
  char *str = malloc(strlen(tmp));

  printf("%s\n", getSubstring(str, tmp, 0, 4));
  printf("%s\n", getSubstring(str, tmp, 5, 10));

  free(str);
  exit(EXIT_SUCCESS);
}

Producción :

This
string lit
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artículo relacionado - C String