Recortar una cadena en C
- Utilice la función personalizada para recortar una cadena en C
- Utilice otra función personalizada para recortar una cadena en C
![Recortar una cadena en C](/img/C/feature-image---trim-string-in-c.webp)
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
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