Apare uma corda em C

Jinku Hu 12 outubro 2023
  1. Use a função personalizada para cortar uma string em C
  2. Use outra função personalizada para aparar uma string em C
Apare uma corda em C

Este artigo explicará vários métodos de como aparar uma string em C.

Use a função personalizada para cortar uma string em C

As funções de corte de string não fazem parte dos utilitários de string da biblioteca C padrão nem são fornecidas pelas funções compatíveis com POSIX, portanto, é necessário implementar a funcionalidade por conta própria. Neste exemplo, implementamos a função chamada trimString que recebe um único argumento de ponteiro char e retorna o ponteiro para a string aparada. Observe que nós, como chamadores, somos responsáveis ​​por passar a string que pode ser modificada. Neste caso, usamos strdup para duplicar str1, e quando a string é usada, deve ser liberada usando a chamada free.

A função trimString é implementada de modo que itera sobre a string caractere por caractere e, embora o dado seja um espaço, ela incrementa o ponteiro em um. Resumindo, este loop while move o ponteiro char para o primeiro caractere sem espaço, aparando o prefixo da string. Em seguida, o ponteiro incrementado é verificado se o valor é igual a nulo, implicando que a string dada não tinha caracteres que não fossem de espaço; portanto, retornamos o nulo para denotar o caso de erro. O loop Consequent while remove os espaços no final da string movendo o ponteiro para o final da string, um a um. Depois que o loop encontra o caractere sem espaço, ele para e a próxima instrução coloca o caractere \0 no final dele.

#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);
}

Resultado:

  temporary string     
temporary string

Use outra função personalizada para aparar uma string em C

Semelhante à função de corte anterior, trimString2 é implementado para remover espaços de ambos os lados da string. O primeiro loop while calcula o número de espaços no final da string e o segundo loop move o ponteiro para o primeiro caractere sem espaço. No final das instruções de loop, len contém o número de caracteres na string aparada gerada pela função strndup. Observe que o ponteiro retornado da função strndup deve ser liberado pelo chamador para evitar vazamentos de memória.

#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);
}

Resultado:

     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

Artigo relacionado - C String