Como usar ponteiros e Cordas em C Programming
A linguagem de programação C carece de uma variável de cadeia, mas tem a matriz char, que é efetivamente a mesma coisa. Como uma matriz, uma string em C pode ser completamente torcido, apertados, e abusado usando ponteiros. É um tema muito mais interessante do que mexer com matrizes numéricos.
Menu
Como usar ponteiros para exibir uma string
Você é muito provável familiar com a exibição de uma string em C, provavelmente usando a função tanto as puts () ou printf (). Cordas, também, pode ser exibido um caractere por vez, arrastando através de um conjunto.
OLÁ, STRING
#include int main) {amostra char ([] = "De onde vem o meu socorro? n" index -int = 0-while (amostra [índice] = ' 0'!) {putchar (amostra [índice]) - índice ++ -} return (0) -}
O código mostrado na Olá, String é um código C completamente legítima, válida para criar um programa que exibe uma string. Mas ele não usa ponteiros, não é?
Exercício 1: Modificar o código fonte a partir Olá, String, substituindo a notação de matriz com a notação ponteiro. Eliminar a variável índice. Você precisa criar e inicializar uma variável de ponteiro.
A avaliação do loop while in Olá, String é redundante. O caractere nulo avalia como falso. Assim, a avaliação pode ser reescrita como
while (amostra [índice])
Enquanto o elemento de matriz referenciado por exemplo [índice] não é um caractere nulo, o loop gira.
exercício 2: Edite avaliação do loop while em sua solução para o Exercício 1, eliminando a comparação redundante.
Exercício 3: Continuar trabalhando em seu código, e desta vez eliminar as declarações no loop while. Coloque toda a acção na avaliação do instrução while. Por uma questão de referência, a função putchar () retorna o caractere que é exibido.
Como declarar uma string usando um ponteiro
Aqui está um truque assustador você pode puxar usando ponteiros, que vem com um barco cheio de cautela. Considere Um ponteiro anuncia uma String.
A POINTER ANUNCIA UMA CORDA
#include int main) ({* amostra de char = "De onde vem o meu socorro? n" -enquanto (putchar (* amostra ++)) - retorno (0) -}
Em Um ponteiro anuncia uma cadeia, a cadeia que é exibido é criado por inicializar um ponteiro. É uma construção que parece estranho, mas é algo que você testemunhar muitas vezes em código C, particularmente com cordas. (Não é possível utilizar esta convenção para inicializar uma matriz numérica.)
exercício 4: Copie o código-fonte de um ponteiro anuncia uma String em seu editor. Construir e executar.
O barco cheio de precaução em Um ponteiro anuncia um String, e quando você usar um ponteiro para declarar diretamente uma corda, é que a variável ponteiro não pode ser manipulado ou então a string é perdido.
Por exemplo, um ponteiro anuncia uma String, o amostra variável é usada na linha 7 para percorrer a cadeia como parte da função putchar (). Oops. Se você wantto usar amostra mais tarde no código, que deixaria de fazer referência ao início da string.
Ao declarar uma string usando um ponteiro, não mexa com a variável de ponteiro em outras partes do código.
A solução é salvar o endereço inicial do ponteiro ou simplesmente usar um segundo ponteiro para trabalhar na corda.
exercício 5: Corrigir o código em um Pointer anuncia uma String para que o amostra o valor da variável é salvo antes do While Loop é executado e é então restaurado posteriormente. Adicionar um (amostra) declaração puts ao código após o loop while é feito em execução, para provar que endereço original da variável é restaurada.
Como classificar cordas
Tomando o que você sabe sobre a classificação na linguagem C, você provavelmente pode criar um programa de triagem cadeia decente. Ou, no mínimo, você pode explicar como ele é feito. Isso é ótimo! Mas é um monte de trabalho.
O que é melhor quando se trata de classificar cordas não é para ordenar as cordas em tudo. Não, em vez disso, você classificar uma matriz de ponteiros referenciando as cordas. Classificando Cordas, a tentativa inicial mostra um exemplo.
CLASSIFICAÇÃO CORDAS, a tentativa inicial
#include int main () {char * frutas [] = { "apricot", "banana", "abacaxi", "maçã", "caqui", "pêra", "blueberry"} - char * temp-int a, b, x-for (a = 0 alt; 6-a ++) para (b = a + 1-blt; 7-b ++) if (* (frutas + a)> * (frutas + b)) {temp = * (frutas + a) - * (frutas + a) = * (frutas + b) - * (frutas + b) = temp-} for (x = 0-xlt; 7-x ++) puts (frutas [x]) - return (0) -}
exercício 6: Digite o código-fonte do Classificando Cordas, a tentativa inicial em seu editor. Criar e executar para garantir que as cordas são devidamente ordenados.
Bem, provavelmente não funcionou. Ele pode ter, mas se a lista é ordenada ou alterado de alguma forma, é uma consequência não intencional e, definitivamente, não repetível.
O problema está na linha 19. Você não pode comparar strings usando o operador>. Você pode comparar caracteres individuais e você pode, em seguida, classificar a lista com base nesses personagens, mas a maioria dos seres humanos preferem palavras ordenados em toda a sua extensão, não apenas o primeiro caractere.
exercício 7: Modifique o código fonte, e usar a função strcmp () para comparar strings para determinar se eles precisam ser trocados.