String truncada em C

Jinku Hu 12 outubro 2023
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
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

Artigo relacionado - C String