Olá e bem-vindo. Nesta palestra, vou dar uma
demonstração de uma solução para nosso desafio anterior.
Vou explicar como podemos inverter
os caracteres em uma string usando a função
str length e também classificar as strings usando str
compare e str copy, bem como usando
o algoritmo de bolha.
Vamos trazer blocos de código.
E vou criar um único programa, acho, para isso. Mencionei no desafio
que você cria dois programas.
Mas, para simplificar e demonstrar, vou criar apenas um.
Crie um
projeto, vou chamá-lo de
funções de string ou alguma variação disso.
Vamos chamá-lo de exemplo de funções de
string comuns.
Então, vamos começar com o inverso. O inverso pode ter sua própria função
ou podemos apenas colocá-lo no principal. Eu ia colocá-lo no principal.
Então, a primeira coisa que quero fazer é criar um - bem, a primeira coisa
que quero fazer na verdade é incluir o arquivo de cabeçalho correto para poder usar essas funções
de string, que é minha string de inclusão. h.
É aqui que contém todas as funções de string interessantes.
Agora vou criar um array de caracteres. Vou torná-lo um tamanho 100.
É simplesmente arbitrário, mas
não será capaz de armazenar coisas maiores que 100.
Vou criar algumas variáveis locais que
me ajudarão na análise. E o que eu quero fazer
é exibir algumas saídas primeiro para o usuário.
Portanto, vou dizer apenas alguns avanços
de linha, imprimir caracteres
individuais e individuais de string e em ordem reversa.
Isso dirá ao usuário o que está acontecendo e também imprimirá apenas
para tornar mais aparente, apenas imprima
algo assim, para que seja mais fácil de ler.
Vou dizer input the string. Vou ler na string.
E então vou armazenar a string.
Então, vou
dizer scanf, present s e vou dizer str.
E não preciso passar o e comercial para ler.
Então, vou pegar o comprimento da corda. Vou colocar isso na minha variável local l.
Portanto, posso chamar str link dizendo apenas o comprimento de str passando na
string, e ele retorna quantos caracteres nessa string. Muito, muito fácil.
E então vou imprimir algo para dizer a eles que os caracteres estão na ordem inversa.
Portanto, os caracteres da string em
r reverso barra invertida n.
Em seguida, vou escrever um pequeno loop for que atravessa
meu array e de acordo com o comprimento e apenas o inverte.
Portanto, vou dizer que para I é igual a l.
Portanto, vou retroceder na matriz de
strings real. Vou começar no final e seguir em frente.
E digamos que I seja maior ou igual
a 0 e I menos menos. E você percebe que não preciso olhar para
nenhum caractere de terminação nulo quando faço isso dessa maneira.
Então, vou imprimir cada personagem assim que os encontrar.
Para imprimir um caractere e ver você basta fazer o percentual c.
E apenas faça isso e diga str sub-I.
E é basicamente isso.
E então imprimo uma nova linha.
E, na verdade, vou imprimir um monte de coisas só para terminar, um
monte de travessões.
Vamos ver se funciona, muito fácil este como deveria ser,
conseguir o comprimento não deve ser difícil.
E esqueci um feed de linha, então vamos consertar isso.
Portanto, aqui diz imprimir caracteres individuais da string invertida ou inserir a string.
Agora, scanf, ele só fará a leitura. Então, se eu entrar no espaço Jason Feden.
Scanf vai apenas ler para Jason e para o espaço.
Você gostaria de usar outra função, como f get s, se quisesse ler tudo.
Então o que isso vai fazer é reverter a impressão de Jason
nosaj, o que realmente acontece. Os caracteres do reverso da string são nosaj.
Isso é muito simples, não é uma função ou
implementação muito complicada.
Agora vamos tentar classificar uma string.
E agora vou fazer algo. E vou fazer isso no geral, acho que por enquanto.
Eu deveria colocá-los em funções reais, mas não estamos
demonstrando funções nesta aula, estamos demonstrando strings.
Portanto, vamos criar mais algumas variáveis locais de que precisaremos.
Principalmente, vamos criar um nome.
E, neste caso, eu
criaria uma matriz de strings. Criaremos um array de strings e usaremos f get s.
Vou criar um array de strings. Portanto, isso se parece com
uma matriz bidimensional.
Então, o que estamos fazendo aqui é criar 25 strings de tamanho 50.
Depois, também vou criar outro de apenas 25, que
conterá cada string.
E então vou adicionar
mais duas variáveis. Vou adicionar um n e um j.
E então, depois de fazermos nosso reverso, vou imprimir.
Outra mensagem para dizer
o que estamos fazendo classifica
as strings de um array usando bubble sort.
Não vou explicar o tipo de bolha para você. Porque, novamente, isso é apenas um algoritmo que não é
relevante para o que estamos fazendo. Na verdade, é apenas uma forma de classificar.
Na verdade, é um dos tipos mais fáceis porque você apenas troca essencialmente.
Mas o que queremos fazer é primeiro obter quantas strings eles vão inserir. Então vamos dizer printf
input número
de strings, e então vamos dizer scanf.
Scanf pode ser usado aqui porque é apenas um número.
Vamos dizer por cento d, e vamos armazenar isso em nossa variável local n.
Mais uma vez, sei que não estou usando
grandes nomes aqui, mas estou demonstrando algo. Como é um é, precisamos passar o e comercial.
Em seguida, vou pedir-lhes para inserir as cordas.
Então, aqui vou
dizer string de entrada
1 2 ou 3 seguido por uma alimentação de linha.
Esse será apenas o número que eles devem inserir.
Corda um, corda dois ou corda três.
Então, terei um loop que vai e obtém a entrada.
Então aqui vou dizer que para I é igual
a 0, I é menor que igual an para quantas strings eles
querem inserir e I mais mais ou mais mais I.
Aqui eu vou realmente ler a string e vou usar uma maneira diferente de ler -
eu estava pensando em usar f get s, para que
você pudesse inserir uma string que tivesse espaços. Mas não acho que precisávamos.
Fazemos scan f,
e vamos ler scanf em nosso array de
nomes.
Lembre-se, temos o nome e esta é uma string de strings
essencialmente de 25 caracteres.
Os 50 caracteres 25 palavras.
Portanto, o número máximo de palavras que você pode inserir é 25.
Então, vamos armazenar isso em
nosso array de nomes. Então, vamos apenas dizer scanf.
Vamos ler em uma string e colocar no
nome sub I.
E assim, armazenamos nossos arrays, só podemos armazenar até 25.
Agora terminamos nosso loop e podemos apenas escrever nosso tipo de bolha.
E então nosso tipo de bolha, não vou explicar a você, só vou dizer que é
um algoritmo muito simples que tem um loop interno.
Então você tem um loop for que passa, I é igual a 1 em
todas as cordas.
E então, em seu loop interno, você vai de zero a todas
as cordas menos um. E você compara essa primeira string com todas as outras strings.
E você essencialmente empurra-os para baixo. Mas o que é
importante aqui é a função de comparação de str.
Deixe-me tentar obter esse recuo corretamente nas
funções de cópia do str, isso é o que realmente importa.
Você notará que não tenho nenhum colchete final para nenhum dos quatro porque
eles têm declarações simples.
Mesmo que este if tenha algo em seu corpo if, esta é apenas uma declaração.
Então, estamos comparando cada palavra com todas as outras, essencialmente,
depois de termos comparado uma anteriormente.
Então dizemos se str compare name sub j e name
sub j sub one, então str compare
leva dois argumentos, duas matrizes de
caracteres, ponteiros de caracteres
na verdade.
E se eles forem iguais, ele retornará zero.
Se o primeiro parâmetro for menor
que o segundo parâmetro, ele retornará
menor que zero.
E se o primeiro parâmetro for maior que o
segundo parâmetro, ele retornará maior que zero, um.
Então, o que isso significa é que se a primeira string for maior que a
segunda string, queremos trocar tudo. E é por isso que temos esse temporário.
Temp está, na verdade, armazenando uma string temporária temporária.
Então colocamos o nome temporário sub j e
trocamos o nome sub j pelos nomes de j mais um.
É assim que funciona o tipo de bolha. Novamente, o que é importante aqui é str compare e str copy.
E se você estiver seguro, use strn compare.
E quando você faz strn compare. Bem, na verdade strn compare,
você não se preocupa porque isso é apenas se você quiser comparar o prefixo.
Para strn copy, você realmente deseja usar strn copy.
E esse terceiro parâmetro é o que é importante.
Então strn copy, você só quer ter certeza de não copiar em mais do
que o tamanho de temp, menos um, porque caso contrário, você terá um estouro de buffer.
Então você faria tudo isso, você também poderia usar -
se não fosse um buffer de caracteres, você provavelmente desejaria usar
str length se fosse um ponteiro. Mas o tamanho de funcionará bem para isso.
E, novamente, isso eliminará quaisquer saturações de buffer.
Portanto, é sempre mais seguro usar strn copy
e one porque temos nosso terminador nulo que precisa ir no final.
Portanto, aqui está apenas o destino de origem para a cópia strn.
Estamos copiando o nome sub j em temp e o mesmo com os nomes j mais
um e o nome sub j. E, por último, temp em nomes sub
j mais um. Na verdade, tenho
que atualizar essas variáveis porque elas estão erradas
porque sempre têm que ser a fonte. Portanto, nomeie aqui o nome sub j.
E então o último seria
nomes de j mais um, j mais um.
Isso é strn copy e str compare, funções muito fáceis de usar.
Depois de classificá-los, queremos apenas imprimi-los.
Portanto, queremos dizer que as strings aparecem após a
classificação, coloque-as na
alimentação de linha e, em seguida, faça
um loop
para imprimir todas as strings em nosso array.
Portanto, dizemos que 4 I é igual a 0.
I é menor ou igual an porque n
representa quantas strings classificamos e inserimos.
Em seguida, queremos apenas examinar nossa cadeia de matrizes de strings.
Então, queremos dizer alimentação de linha de
printf e nomear sub I.
Portanto, o nome sub I é, na verdade, nossa matriz classificada, é por isso que tínhamos
nomes de nome sub I.
Mesmo que não tenhamos o segundo porque representa o tamanho de cada personagem.
25 palavras de 50 máx.
Então, vamos ver se isso funciona.
Construa, recebi algumas mensagens porque não sei soletrar.
E se executarmos isso. Primeiro, vamos executar nossa função reversa para que
você possa ver isso novamente porque incluímos no mesmo programa.
Diga Fedin e idf isso é bom.
Insira o número de strings que queremos classificar. Digamos cinco, digamos
zzzz apenas para ficar claro, algo
assim.
Eu baguncei um pouco aí, mas parece que resolvi, a b d f r z.
Então funciona. Eu tenho um bug
embora porque porcentagem de string de entrada d.
Eu insiro o número de strings em ne digo menos que
igual, devo apenas dizer menos que.
Então, vamos executá-lo novamente apenas para demonstrar, mas eu tenho que construí-lo.
Não se esqueça de construir depois de mudar as coisas.
Novamente, diremos qualquer coisa aqui e depois cadeias
de números. Vamos
apenas fazer quatro.
Então eles os colocam em ordem alfabética e dizem d e l z, então parece bom.
Portanto, você pode definitivamente melhorar este código onde você pode querer colocar
tudo em funções, torná-lo mais modular. Mas o que estou tentando fazer com esta
tarefa é como você usa str compare, como você usa strn copy e como
você pode usar str length.
Você também deve brincar com o str cat,
strn cat e essa é a outra função comum real.
Você pode querer brincar com strstr, strchar para pesquisar. Essas são muito,
muito boas ou is, upper is, lower para verificar caracteres,
ou o atalho das funções de conversão.
Obrigada. Eu espero que isso tenha sido útil.