Faça um programa que receba do usuário o tamanho de uma string e chame uma função para alocar dinamicamente essa string. Em seguida, o usuário deverá informar o conteúdo dessa string. O programa imprime a string sem suas vogais.

Passo 1

Resumo do enunciado: o programa deve ler do usuário um inteiro que representa o tamanho da string, chamar uma função para alocar dinamicamente espaço para essa string, depois ler o conteúdo da string e imprimir essa mesma string sem suas vogais. Vamos usar conceitos de alocação dinâmica (malloc/free) e manipulação de strings em C.

Passo 2

Entender alocação dinâmica: em C, para guardar uma string de tamanho N a gente precisa de N+1 bytes para incluir o caractere ‘\0’ que termina a string. Usamos a função malloc para reservar esse espaço e depois liberamos com free.

Passo 3

Implementar a função de alocação: criamos uma função char* aloca_string(int n) que faz malloc((n+1)*sizeof(char)), verifica se o retorno não é NULL e retorna o ponteiro alocado.

Passo 4

Implementar a função de impressão sem vogais: criamos void imprime_sem_vogais(const char* s) que percorre cada caractere de s, testa se não é vogal (maiúscula ou minúscula) e, se não for, imprime usando putchar ou printf.

Passo 5

Escrever a função main: em main() lemos o tamanho (int n), chamamos aloca_string(n) para obter o buffer, lemos a string do usuário com scanf ou fgets, chamamos imprime_sem_vogais, liberamos o buffer com free e finalizamos.

Passo 6

Testar o programa com exemplos rápidos: por exemplo, para entrada n=10 e string “abacaxi123”, a saída deve ser “bcx123”.

Resposta

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
char* aloca_string(int n) {
char* p = (char*)malloc((n + 1) * sizeof(char));
if (p == NULL) {
printf(“Erro de alocação de memória!\n”);
exit(1);
}
return p;
}
int eh_vogal(char c) {
c = tolower((unsigned char)c);
return (c == ‘a’ || c == ‘e’ || c == ‘i’ || c == ‘o’ || c == ‘u’);
}
void imprime_sem_vogais(const char* s) {
for (int i = 0; s[i] != ‘\0’; i++) {
if (!eh_vogal(s[i])) {
putchar(s[i]);
}
}
putchar(’\n’);
}
int main() {
int n;
printf(“Digite o tamanho da string: “);
scanf(”%d”, &n);
char* str = aloca_string(n);

printf("Digite a string (máximo %d caracteres): ", n);
scanf(" %s", str);

printf("String sem vogais: ");
imprime_sem_vogais(str);

free(str);
return 0;
}

Exercícios relacionados