cblc/exercicios/07/README.org
2025-04-01 09:46:17 -03:00

3.1 KiB

Curso Básico da Linguagem C

Exercícios da aula 7: Vetores, ponteiros e strings

1. Desafio: Função str_blen

Crie uma função que retorne um inteiro correspondente ao comprimento em bytes de uma string sem incluir o terminador nulo.

Exemplo de teste…

#include <stdio.h>

int main(void) {

    char *str = "Olá, mundo!";

    /* \042 é o caractere " em octal na tabela ASCII. */
    printf("A string \042%s\042 tem %d bytes.\n", str, str_blen(????????));
    
    return 0;
}

2. Pesquise e analise o código

No último exercício, você obteve um número de bytes maior do que a quantidade de caracteres do texto em *str. Isso acontece porque caracteres acentuados são compostos por mais de um byte (caracteres multibyte).

O código abaixo implementa a função str_mblen, para retornar o número de caracteres contando caracteres multibyte como um único caractere:

#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include <locale.h>

int str_mblen(const char *str) {
    setlocale(LC_ALL, "");
    int count = 0;
    int len;
    
    while (*str) {
        len = mblen(str, MB_CUR_MAX);
        if (len < 1) break;
        str += len;
        count++;
    }

    return count;
}

int main() {
    const char *txt = "Olá, mundo!";
    
    printf("Número de caracteres: %d\n", str_mblen(txt));

    return 0;
}

Seu objetivo é explicar:

  • Como a função str_mblen funciona?
  • Como a função mblen é utilizada?
  • O que é a macro MB_CUR_MAX?
  • Por que foi necessário definir setlocale?
  • O que está sendo testado no loop while (*str)?

3. Desafio: Palavras invertidas

Escreva uma função que inverta a ordem dos caracteres de cada palavra em uma string, mas preservando a ordem das palavras.

Exemplo:

Original --> Maria das Couves
Inversão --> airaM sad sevuoC

4. Desafio: Função array_isort

Escreva a função array_sort para organizar, em ordem crescente, os valores em um dado vetor de inteiros.

Vetor para testes…

int num[] = {3, 7, 5, 9, 3, 2, 0, 4, 1, 6, 8};

5. Desafio: codificador e decodificador ROT13

O método de codificação ROT13 desloca em 13 caracteres à frente no alfabeto cada um dos caracteres de um texto.

Exemplos…

a => n
b => o
c => p
e => r
t => g (depois de 'z', continua em 'a')

Seu objetivo é criar as funções rot13_encode e rot13_decode para, respectivamente, codificar e decodificar uma string no método ROT13.

Requisitos…

  • Não alterar caracteres multibyte.
  • As funções devem apenas imprimir os resultados.

Referência…

As suas funções devem se comportar como os comandos abaixo:

:~$ echo abacate | tr 'A-Za-z' 'N-ZA-Mn-za-m'
nonpngr
:~$ echo avião | tr 'A-Za-z' 'N-ZA-Mn-za-m'
nivãb
:~$ echo cvgnatn | tr 'A-Za-z' 'N-ZA-Mn-za-m'
pitanga