Elabore um programa que solicita ao usuário uma sequência de caracteres e os armazena em um vetor alocado dinamicamente. Em seguida, realize a cópia dos caracteres para um outro vetor alocado dinamicamente em que são excluídos os espaços.

Passo 1

Beleza, vamos resolver esse exercício juntos! O que você precisa fazer é criar um programa que pede para o usuário digitar uma sequência de caracteres, armazena essa sequência em um vetor que é alocado dinamicamente na memória, e depois copia esses caracteres para outro vetor também alocado dinamicamente, mas sem os espaços. Para resolver isso, vamos precisar entender como funciona a alocação dinâmica de memória, manipulação de strings e como percorrer e copiar elementos de um vetor para outro.

Passo 2

Primeiro, precisamos solicitar ao usuário que insira uma sequência de caracteres. Em muitas linguagens de programação, como C, podemos usar funções como scanf ou gets para isso. Vamos supor que estamos usando C para este exemplo.
char *entrada;
entrada = (char *)malloc(100 * sizeof(char)); // Alocando espaço para 100 caracteres
printf("Digite uma sequência de caracteres: ");
scanf(" %[^\n]", entrada);
Aqui, malloc é usado para alocar dinamicamente memória suficiente para 100 caracteres. Isso significa que reservamos um espaço na memória que o programa pode usar para armazenar a string que o usuário vai digitar.

Passo 3

Agora que temos a entrada do usuário armazenada em entrada, precisamos criar um segundo vetor onde vamos copiar os caracteres, mas sem os espaços. Primeiro, vamos alocar memória para esse segundo vetor. Para garantir que temos espaço suficiente, podemos alocar a mesma quantidade de espaço que usamos para o vetor original.
char *semEspaco;
semEspaco = (char *)malloc(100 * sizeof(char));

Passo 4

Com os dois vetores alocados, vamos percorrer o vetor entrada, caractere por caractere. Para cada caractere, vamos verificar se ele é um espaço. Se não for, copiamos para o vetor semEspaco. Para isso, precisamos de um índice separado para o segundo vetor.
int i, j = 0;
for(i = 0; entrada[i] != '\0'; i++) {
    if(entrada[i] != ' ') {
        semEspaco[j] = entrada[i];
        j++;
    }
}
semEspaco[j] = '\0'; // Adiciona o caractere nulo no final da string
Explicando:
  • Usamos um loop for para percorrer cada caractere da string entrada até encontrar o caractere nulo \0, que indica o fim da string.
  • A condição if(entrada[i] != ' ') verifica se o caractere atual não é um espaço.
  • Se não for espaço, copiamos o caractere para o vetor semEspaco na posição j e incrementamos j para a próxima posição.
  • Após o loop, adicionamos \0 para terminar a string corretamente no segundo vetor.

Passo 5

Finalmente, podemos exibir as duas strings para verificar se a cópia sem espaços funcionou corretamente.
printf("Entrada original: %s\n", entrada);
printf("Sem espaços: %s\n", semEspaco);
E não esqueça de liberar a memória alocada após o uso para evitar vazamentos de memória:
free(entrada);
free(semEspaco);

Resposta

Com esse programa, ao rodar, o usuário poderá inserir uma sequência de caracteres que será armazenada no vetor entrada. Em seguida, uma cópia dessa sequência sem espaços será armazenada no vetor semEspaco e ambas as strings serão exibidas na tela. Tudo isso utilizando alocação dinâmica de memória para garantir flexibilidade no armazenamento.

Exercícios relacionados

Implemente um programa para manipular os dados dos usuários da biblioteca. Crie uma estrutura contendo as variáveis: a. Crie uma lista para armazenar os dados. As funcionalidades que devem ser implementadas são: criar lista, incluir usuário, excluir usuário, buscar (pelo CPF). Conta o número de alunos de determinado curso.
Implemente uma lista dinâmica de números positivos em que os números ímpares fiquem todos juntos no início da lista e os pares fiquem todos juntos no final da lista
b. Implementa a função INIC que permite fazer a carga inicial da lista
Implemente uma lista dinâmica de números positivos em que os números ímpares fiquem todos juntos no início da lista e os pares fiquem todos juntos no final da lista
e. Implemente a função LISTAR, que coloca na tela todos os elementos existentes.
Faça um programa que lê três palavras do teclado e imprime as três palavras na ordem inversa.