Converter string em minúsculas em C

Jinku Hu 12 outubro 2023
  1. Use a função tolower para converter string em minúsculas em C
  2. Use a função personalizada para converter string em minúsculas em C
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
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