Truncar cadena en C

Jinku Hu 12 octubre 2023
Truncar cadena en C

Este artículo presentará varios métodos sobre cómo truncar cadenas en C.

Utilice la función personalizada con aritmética de puntero para truncar la cadena

Dado que las cadenas en C son solo los Arrays de caracteres terminadas con un byte nulo - \0, podemos implementar una función personalizada que mueva el puntero actual al principio de la cadena por el número dado de lugares y devuelva un nuevo valor de puntero.

Sin embargo, tenga en cuenta que hay dos problemas; la primera es que necesitamos tener la opción de truncar la cadena dada de izquierda a derecha y la segunda es que mover el puntero no es suficiente desde el lado derecho de la cadena, ya que es necesario insertar el byte nulo para indicar el final. Por lo tanto, definimos la función truncString que toma la cadena y varios caracteres para truncar de la cadena. El número puede ser negativo, indicando el lado del que eliminar el número dado de caracteres. A continuación, recuperamos la longitud de la cadena usando la función strlen, lo que implica que el usuario es responsable de pasar la cadena válida. Luego, comparamos la longitud con la cantidad de caracteres que se truncarán y luego pasamos a realizar la manipulación del puntero.

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

char *truncString(char *str, int pos) {
  size_t len = strlen(str);

  if (len > abs(pos)) {
    if (pos > 0)
      str = str + pos;
    else
      str[len + pos] = 0;
  }

  return str;
}

int main(void) {
  char *str1 = "the string to be truncated";

  printf("%s\n", str1);
  printf("%s \n", truncString(strdupa(str1), 4));
  printf("%s \n", truncString(strdupa(str1), -4));

  exit(EXIT_SUCCESS);
}

Producción :

the string to be truncated
string to be truncated
the string to be trunc

Simplemente asignamos el valor 0 a la posición del carácter calculada restando la longitud de la cadena y el número pasado. Por lo tanto, movimos el final de la cadena y la impresión de su valor se puede hacer con el puntero anterior.

Alternativamente, podemos implementar la función similar truncString2 con el mismo prototipo pero trunca la cadena al número de caracteres pasados ​​como segundo argumento. El signo del número indica el lado desde el que se forma la nueva cadena, es decir, el entero positivo denota el lado izquierdo y el negativo, el opuesto.

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

char *truncString2(char *str, int pos) {
  size_t len = strlen(str);

  if (len > abs(pos)) {
    if (pos > 0)
      str[pos] = 0;
    else
      str = &str[len] + pos;
  } else {
    return (char *)NULL;
  }

  return str;
}

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

  printf("%s\n", str2);
  printf("%s \n", truncString2(strdupa(str2), 6));
  printf("%s \n", truncString2(strdupa(str2), -6));

  exit(EXIT_SUCCESS);
}

Producción :

the string to be truncated
string to be truncated
the string to be trunc
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