Exercício: Lista com um vetor de Ponteiros
para Strings.
-
Uma lista ordenada pode conter Strings de
qualquer comprimento < 10000.
-
Esta lista tem número de elementos
máximo fixo = 100 e é implementada como um vetor de ponteiros
para Strings.
-
Utilize as rotinas de lista com vetor que
você utilizou para a agenda.
-
Um novo String é lido primeiramente
para dentro de uma variável auxiliar qualquer.
-
Então é alocada memória
para exatamente o seu tamanho e ele é copiado para esta área.
Para copiar um String utilize strcpy().
-
Por fim um lugar na lista é encontrado
para ele. A posição escolhida do vetor de ponteiros da lista
é instanciada através da atualização dos valores
do ponteiro da posição do string na lista com o endereço
do string.
-
Como você não sabe o comprimento
do String que o usuário vai digitar, use primeiro uma variável
auxiliar grande (10000 posições) para guardar o que foi digitado.
-
A lista deve ser passada como parâmetro
para todas as funções que a utilizam.
-
Da mesma maneira as variáveis de controle
da lista.
-
Todas as funções de lista ordenada
implementadas anteriormente devem ser reimplementadas para utilizar estes
Strings.
-
Para a leitura de um String utilize scanf("%s",
entrada) onde char entrada[10000].
Modelagem da Lista
Pseudo-código:
constantes Maxlista = 100;
tipo Lista {
caracter *dados[Maxlista];
" Vetor de ponteiros para char
"
inteiro ultimo;
};
Importante:
Observe que criando uma variável do tipo Lista você não
vai estar alocando memória para os strings a serem lidos, apenas
para os ponteiros para eles.
Toques:
Para verificar o comprimento de um String:
Utilize a função strlen().
Esta função devolve o comprimento
(em caracteres imprimíveis) de um String.
Protótipo: int strlen(char *p);
#include <stdio.h>
#include <stdlib.h>
#include <sting.h>
char p[90] = "Carro";
main ()
{
printf("%i", strlen(p) );
}
Imprime: 5.
Para copiar um String:
Utilize a função strcpy().
Esta função copia o conteúdo
de um string (dado por um apontador) para a posição de memória
dada por outro apontador.
Protótipo: char *strcpy(char *destino,
*fonte);
#include <stdio.h>
#include <stdlib.h>
#include <sting.h>
char p[90] = "Carro";
char lata[20];
main ()
{
strcpy(lata, p) );
printf("s%", lata);
}
Imprime: Carro.