HOWTO · C

Converter string em minúsculas em C

Este artigo apresenta como converter string em minúsculas em C

Este artigo demonstrará vários métodos sobre como converter string em minúsculas em C.

Use a função tolower para converter string em minúsculas em C

A função tolower é parte da biblioteca padrão C definida no arquivo de cabeçalho <ctype.h>. tolower recebe um argumento do tipo int e retorna o valor convertido do caractere fornecido se a representação em minúsculas correspondente existir. Observe que o caractere passado precisa ser do tipo EOF ou unsigned char representável. Nesse caso, inicializamos o ponteiro char com um valor literal de string e, em seguida, iteramos sobre cada caractere para converter para valores em minúsculas. Lembre-se, porém, de que passar argumentos do tipo char para a função tolower deve ser convertido para unsigned char.

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
  char *str = "THIS STRING LITERAL IS ARBITRARY";

  printf("%s\n", str);
  for (size_t i = 0; i < strlen(str); ++i) {
    printf("%c", tolower((unsigned char)str[i]));
  }
  printf("\n");

  exit(EXIT_SUCCESS);
}

Resultado:

THIS STRING LITERAL IS ARBITRARY
this string literal is arbitrary

O código do exemplo anterior substitui o conteúdo da string original pelos caracteres convertidos em minúsculas. Alternativamente, podemos alocar outro ponteiro char usando calloc, que é semelhante a malloc, exceto que zera a memória alocada e armazena a string convertida separadamente. Observe que o ponteiro deve ser liberado antes da saída do programa ou, se o processo for de longa duração, ele deve ser liberado assim que a variável string não for necessária.

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
  char *str = "THIS STRING LITERAL IS ARBITRARY";

  printf("%s\n", str);

  size_t len = strlen(str);
  char *lower = calloc(len + 1, sizeof(char));

  for (size_t i = 0; i < len; ++i) {
    lower[i] = tolower((unsigned char)str[i]);
  }
  printf("%s", lower);
  free(lower);

  exit(EXIT_SUCCESS);
}

Resultado:

THIS STRING LITERAL IS ARBITRARY
this string literal is arbitrary

Use a função personalizada para converter string em minúsculas em C

Uma solução mais flexível seria implementar uma função personalizada que leva a variável de string como o argumento e retorna a string convertida em minúsculas em um local de memória separado. Este método é essencialmente o desacoplamento do exemplo anterior da função main. Neste caso, criamos uma função toLower que leva char*, onde uma string terminada em nulo é armazenada e um inteiro do tipo size_t denotando o comprimento da string. A função aloca a memória no heap usando a função calloc; assim, o chamador é responsável por desalocar a memória antes que o programa seja encerrado.

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *toLower(char *str, size_t len) {
  char *str_l = calloc(len + 1, sizeof(char));

  for (size_t i = 0; i < len; ++i) {
    str_l[i] = tolower((unsigned char)str[i]);
  }
  return str_l;
}

int main() {
  char *str = "THIS STRING LITERAL IS ARBITRARY";

  printf("%s\n", str);
  size_t len = strlen(str);

  char *lower = toLower(str, len);
  printf("%s", lower);
  free(lower);

  exit(EXIT_SUCCESS);
}

Resultado:

THIS STRING LITERAL IS ARBITRARY
this string literal is arbitrary