Boa noite pessoal!!
Estou "overclockando" os meus neuronios, para fazer dois exercícios para a facul. Um deles parece ser simples, segue o enunciado:
"(1.5) Escreva uma função de protótipo:
void strinv (char s[]);
que inverta os caracteres de uma string. Por exemplo: se a string for “ABCDEF”, deve ser
convertida para “FEDCBA”."
Comentários do professor:
A idéia aqui é implementar a função "strinv". Note que o parâmetro deve ser "char s[]" (vc não deve dimensionar o tamanho de s).
Essa função deve fazer o seguinte:
1. Como a função não tem como saber o tamanho do vetor passado em s, ela deve percorrer esse vetor até encontrar '\0' (fim de string). Assim, calculamos o tamanho da string.
2. Alocar dinamicamente um novo vetor "auxVet" com o tamanho apropriado para a string.
3. Usamos "auxVet" para inverter a string de s (percorremos s de trás para frente e armazenamos os caracteres em auxVet)
4. Depois percorremos auxVet e sobrescrevemos o vetor s, com a sequencia invertida (note que a operação precisa ser feita em s, pois a função strinv não retorna valores.
5. Depois de copiar a string invertida para s, devemos liberar a memória de auxVet.
OBSERVACAO: é possível realizar a inversao da string "sem alocar outro vetor". Bastaria percorrer s com dois indices: um partido de 0 e outro partindo de n - 1 (n é o tamanho da string). Bastaria ir trocando os caracteres. Mas o meu interesse aqui, é que usemos as funções de alocação dinâmica.
Já pesquisei bastante, mas muitas pessoas fazem utilizando dois vetores e talz, fiz um aqui mas não consigo entender como fazer. Na verdade estou com dúvidas de como usar a lógica e os comando corre
Alguém poderia me ajudar, explicar o que eu posso fazer, utilizando alocação dinâmica???
Obrigado pela ajuda pessoal!
Estou "overclockando" os meus neuronios, para fazer dois exercícios para a facul. Um deles parece ser simples, segue o enunciado:
"(1.5) Escreva uma função de protótipo:
void strinv (char s[]);
que inverta os caracteres de uma string. Por exemplo: se a string for “ABCDEF”, deve ser
convertida para “FEDCBA”."
Comentários do professor:
A idéia aqui é implementar a função "strinv". Note que o parâmetro deve ser "char s[]" (vc não deve dimensionar o tamanho de s).
Essa função deve fazer o seguinte:
1. Como a função não tem como saber o tamanho do vetor passado em s, ela deve percorrer esse vetor até encontrar '\0' (fim de string). Assim, calculamos o tamanho da string.
2. Alocar dinamicamente um novo vetor "auxVet" com o tamanho apropriado para a string.
3. Usamos "auxVet" para inverter a string de s (percorremos s de trás para frente e armazenamos os caracteres em auxVet)
4. Depois percorremos auxVet e sobrescrevemos o vetor s, com a sequencia invertida (note que a operação precisa ser feita em s, pois a função strinv não retorna valores.
5. Depois de copiar a string invertida para s, devemos liberar a memória de auxVet.
OBSERVACAO: é possível realizar a inversao da string "sem alocar outro vetor". Bastaria percorrer s com dois indices: um partido de 0 e outro partindo de n - 1 (n é o tamanho da string). Bastaria ir trocando os caracteres. Mas o meu interesse aqui, é que usemos as funções de alocação dinâmica.
Já pesquisei bastante, mas muitas pessoas fazem utilizando dois vetores e talz, fiz um aqui mas não consigo entender como fazer. Na verdade estou com dúvidas de como usar a lógica e os comando corre
C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define size 256
void strinv(char s[size]) {
int i;
char auxVet[size];
for(i= 0; s[size] != '\0'; i++)
{
}
}
int main(int argc, char *argv[])
{
int i=0;
char palavra[256];
printf("Digite uma palavra:\n");
scanf("%s", palavra);
printf("O texto informado eh: %s\n", palavra);
strinv(palavra);
printf("O texto invertido eh: %s\n", palavra);
system("PAUSE");
return 0;
}
Alguém poderia me ajudar, explicar o que eu posso fazer, utilizando alocação dinâmica???
Obrigado pela ajuda pessoal!