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