Apare uma corda em C

  1. Use a função personalizada para cortar uma string em C
  2. Use outra função personalizada para aparar uma string 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 <stdio.h>
#include <stdlib.h>
#include <ctype.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 <stdio.h>
#include <stdlib.h>
#include <ctype.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

Artigo relacionado - C String

  • Obter Substring em C
  • Converter uma string para Inteiro em C