Recortar una cadena en C

Jinku Hu 12 octubre 2023
  1. Utilice la función personalizada para recortar una cadena en C
  2. Utilice otra función personalizada para recortar una cadena en C
Recortar una cadena en C

Este artículo explicará varios métodos de cómo recortar una cadena en C.

Utilice la función personalizada para recortar una cadena en C

Las funciones de recorte de cadenas no forman parte de las utilidades de cadenas de la biblioteca C estándar ni las proporcionan las funciones compatibles con POSIX, por lo que es necesario implementar la funcionalidad por sí misma. En este ejemplo, implementamos la función denominada trimString que toma un único argumento de puntero char y devuelve el puntero a la cadena recortada. Tenga en cuenta que nosotros, como llamadores, somos responsables de pasar la cadena que se puede modificar. En este caso, usamos strdup para duplicar str1, y cuando se usa la cadena, debe liberarse usando la llamada free.

La función trimString se implementa de modo que itera sobre la cadena carácter por carácter, y mientras la dada es un espacio, incrementa el puntero en uno. En resumen, este bucle while mueve el puntero char al primer carácter sin espacio, recortando el prefijo de la cadena. A continuación, se comprueba el puntero incrementado si el valor es igual a nulo, lo que implica que la cadena dada no tenía caracteres que no fueran espacios; por lo tanto, devolvemos el valor nulo para indicar el caso de error. El bucle Consequent while elimina los espacios al final de la cadena moviendo el puntero al final de la cadena hacia atrás uno por uno. Una vez que el bucle encuentra el carácter sin espacio, se detiene y la siguiente instrucción pone el carácter \0 al final.

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

char *trimString(char *str) {
  char *end;

  while (isspace((unsigned char)*str)) str++;

  if (*str == 0) return str;

  end = str + strlen(str) - 1;
  while (end > str && isspace((unsigned char)*end)) end--;

  end[1] = '\0';

  return str;
}

int main(void) {
  const char *str1 = "  temporary string     ";

  printf("%s\n", str1);

  char *tmp = strdup(str1);
  printf("%s\n", trimString(tmp));

  free(tmp);
  exit(EXIT_SUCCESS);
}

Producción :

  temporary string     
temporary string

Utilice otra función personalizada para recortar una cadena en C

Similar a la función de recorte anterior, se implementa trimString2 para eliminar espacios de ambos lados de la cadena. El primer bucle while calcula el número de espacios al final de la cadena, y el segundo bucle mueve el puntero al primer carácter sin espacio. Al final de las sentencias de bucle, len contiene el número de caracteres de la cadena recortada generada por la función strndup. Observe que el puntero devuelto por la función strndup debe quedar libre para el llamador para evitar pérdidas de memoria.

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

char *trimString2(char *str) {
  size_t len = strlen(str);

  while (isspace(str[len - 1])) --len;
  while (*str && isspace(*str)) ++str, --len;

  return strndup(str, len);
}

int main(void) {
  char *str2 = "       temporary string  ";

  printf("%s\n", str2);

  char *s = trimString2(str2);
  printf("%s\n", s);

  free(s);
  exit(EXIT_SUCCESS);
}

Producción :

     temporary string  
temporary string
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