String truncada em C
Este artigo irá apresentar vários métodos sobre como truncar string em C.
Use a função personalizada com aritmética de ponteiro para truncar string
Como as strings em C são apenas as arrays de caracteres terminadas com byte nulo - \0
, podemos implementar uma função personalizada que move o ponteiro atual para o início da string por um determinado número de casas e retorna um novo valor de ponteiro.
Observe, porém, que existem dois problemas; a primeira é que precisamos ter a opção de truncar a string fornecida da esquerda ou direita e a segunda é que mover o ponteiro não é suficiente do lado direito da string, pois o byte nulo precisa ser inserido para denotar o final. Assim, definimos a função truncString
que pega a string e vários caracteres para truncar a partir da string. O número pode ser negativo, indicando o lado do qual remover o número dado de caracteres
. A seguir, recuperamos o comprimento da string usando a função strlen
, o que implica que o usuário é responsável por passar a string válida. Em seguida, comparamos o comprimento com o número de caracteres a serem truncados e, em seguida, passamos a conduzir a manipulação do ponteiro.
#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);
}
Resultado:
the string to be truncated
string to be truncated
the string to be trunc
Nós apenas atribuímos o valor 0
à posição do caractere calculada subtraindo o comprimento da string e o número passado. Assim, movemos o final da string, e a impressão de seu valor pode ser feita com o ponteiro antigo.
Alternativamente, podemos implementar a função semelhante truncString2
com o mesmo protótipo, mas trunca a string para o número de caracteres passados como o segundo argumento. O sinal do número indica o lado do qual formar a nova string, ou seja, o inteiro positivo denota o lado esquerdo e o negativo - o oposto.
#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);
}
Resultado:
the string to be truncated
string to be truncated
the string to be trunc
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