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>
#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;
}
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’);
}
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’);
}
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);
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;
}