Olá, seja bem-vindo de volta. Nesta palestra, quero começar a falar sobre funções de string.
Mencionei anteriormente que
strings, matrizes de caracteres não são um
tipo de dados variável em c.
Portanto, você pode usar qualquer um dos
operadores, mas ainda precisará ser capaz de fazer muitas coisas em strings.
Você será capaz de manipulá-los.
Você vai querer obter o comprimento. Se você quiser
compará-los, todos os tipos de coisas provavelmente os convertem.
Felizmente, a biblioteca padrão vem com várias funções que você
pode usar para realizar esse tipo de operação.
Vou começar falando sobre alguns dos mais comuns e, em
seguida, passaremos para alguns mais específicos em outras palestras.
Portanto, já sabemos que uma string
de caracteres é uma matriz char terminada por um caractere nulo.
As cadeias de caracteres são comumente usadas em programas c.
Felizmente, C fornece muitas funções projetadas especificamente para trabalhar com strings.
Os que vamos discutir são os mais comuns que você usará.
Primeiro, obter o comprimento de uma string usando a função str length.
Copiando uma seqüência de caracteres para outra.
Lembre-se, eu disse a você anteriormente que você não pode usar o operador de atribuição para atribuir uma string.
Então o que você faz é usar str copy ou strn copy.
Além disso, combinando duas cadeias de caracteres, concatenação.
Há um gato forte e um gato forte.
E determinar se duas cadeias de caracteres são iguais.
Novamente, o operador igual a igual a não funcionará para comparar strings
porque são matrizes.
Portanto, se você deseja comparar strings, deve usar funções especiais
fornecidas pela biblioteca c. Str compare e strn compare.
Primeiro, vamos falar sobre o comprimento.
Todas essas funções são definidas na string. arquivo de cabeçalho, então você
deve incluí-lo ao chamar ou invocar uma dessas funções.
Obtendo o comprimento de uma corda.
Str length é uma função que encontra o comprimento da string, é bastante simples.
Ele é retornado como uma variável de tamanho t.
Você pode usar a variável de tamanho t de forma intercambiável com um int.
Mas primeiro, você terá que incluir aquele arquivo de cabeçalho de string se quiser usar o comprimento de str e
é assim que você o usa.
Basicamente, você cria uma string literal entre aspas duplas e a atribui a uma matriz de caracteres.
Você não especifica o tamanho da matriz de caracteres.
O compilador fará isso por você e adicionará o terminador nulo.
Depois de ter minha string definida com
uma constante de string, você pode chamar str length e apenas passar esse
caractere, muito bom.
É um dos mais usados porque você geralmente deseja obter esse comprimento de uma string ao
fazer verificações de validação ou qualquer coisa, se quiser ter
certeza de que não haverá estouro de buffer, você também pode fazer isso.
Esta função muda a string.
Portanto, o cabeçalho da função não usa constante ao
declarar a string de parâmetro formal.
Se você fosse olhar um barbante. h dentro
de user include em seu diretório, você verá que não
está definido como uma constante.
Copiando strings. Copiar strings está
modificando uma string existente, modificando uma
matriz de caracteres existente que contém alguns dados.
Ou se não houver nada dentro, você deseja colocar algo lá.
Já que você não pode atribuir um aumento em c, você também não pode atribuir strings. Mencionei isso antes, declarar um
caractere e usar o operador de atribuição igual não funciona.
Portanto, o que você precisa fazer é usar a função str copy
para copiar uma string para uma string existente.
É o equivalente a um operador para strings, operador de atribuição.
Se declararmos origem e destino de matrizes de dois caracteres,
tudo o que precisamos fazer é dizer str copy source e então,
qualquer que seja a origem, podemos colocar na string e o
mesmo com o destino.
Você também pode colocar variáveis lá, se quiser copiá-las.
Mas o que estamos fazendo aqui é que o primeiro parâmetro é para onde você está copiando.
O segundo parâmetro é a string que você está copiando.
Assim, a fonte teria essa fonte dentro dela após a cópia de str.
Destination ou dest teria esse destino dentro dele após
a chamada str copy.
A função str copy não verifica se a string de origem realmente se encaixa na string de destino.
Então, o que aconteceria se você tivesse uma corda grande.
Portanto, neste exemplo anterior, o que aconteceria se um destino tivesse 100 caracteres.
E em vez de ter como destino, tinha 100 caracteres.
Você tentou copiá-lo para o código-fonte
que tinha apenas 50 caracteres. Haveria um problema.
A string de destino seria maior do que a string de origem que você está copiando.
Portanto, se tentássemos copiar str copy para o código-fonte em vez de copiar como código-fonte, colocamos nele o
código-fonte cinco vezes ou dez vezes o que quer que seja e um em mais de
50, haveria um erro.
E vou demonstrar isso.
Portanto, uma maneira mais segura de copiar strings é usar strn copy. Você notará que n pode ser transformado
em cópia strn.
A cópia de Strn leva um terceiro argumento.
O número máximo de caracteres a serem copiados.
Portanto, aqui você especifica o quanto deseja copiar.
Então, se você tem uma fonte de 40 e um destino de 12 tamanhos, você pode
primeiro fazer um conjunto m que é apenas definir o tamanho dos dados dentro de um destino
para terminadores nulos, dessa forma, quando você adicionar algo, ele estará lá automaticamente, don não se preocupe com isso.
A cópia str irá copiar olá, como você está indo para o código-fonte, e não
vai verificar se o que você está fazendo é maior que o código-fonte.
Mas se você fizer uma cópia strn e copiar em
um destino, ele copiará a origem e só copiará os primeiros 10 caracteres.
Portanto, esse terceiro argumento deve corresponder ao tamanho do destino.
Então, vamos entrar em blocos de código e olhar para o comprimento de str e ver como copiar
strings para ver exatamente como funcionam.
Então aqui, temos o nosso principal.
E obter o comprimento da string string é realmente fácil.
Vamos criar nosso array de caracteres. Nós sabemos como criar uma área de personagem. Não queremos especificar o
tamanho, mas primeiro colocamos o nome e depois os colchetes.
E então podemos inicializá-lo com o que
quisermos, digamos, entre aspas duplas. As aspas duplas representam literais de string.
Então, posso apenas dizer que meu nome é Jason.
O resultado final disso é s
será uma matriz de tamanho
17 caracteres.
Todos esses caracteres mais o terminador nulo.
O terminador nulo é a barra invertida zero.
Você não precisa colocar isso lá porque ele é adicionado automaticamente pelo compilador.
É assim que podemos inicializar e criar uma string em um array de caracteres.
Então, para imprimi-lo, tudo o que precisamos fazer é dizer printf e dizer que o comprimento é.
E então colocamos o percentual s como
o especificador de formato para exibir uma string.
E então tudo o que fazemos é dizer o nome da string.
E para não se confundir, digamos apenas minha string.
E não precisamos usar o E comercial como fizemos anteriormente, nos exemplos anteriores,
podemos apenas dizer minha string. Se compilarmos e executarmos isso,
também poderemos ter certeza de incluir o cabeçalho da string.
Quando compilarmos e executarmos isso, você verá o comprimento da string.
Portanto, o comprimento é e eu não chamei a função de comprimento da string.
Então você tem que realmente chamar a função se quiser exibir o comprimento, então
basta fazer algo assim. Você coloca a corda dentro do comprimento da corda.
Agora, ao executá-lo, você realmente verá o comprimento da corda.
Isso não pode ser uma string, mas um real.
Então é assim que eu exibiria a string. Se eu quiser exibir o comprimento da
string, faço o percentual d na chamada da função.
Agora, quando eu executá-lo,
você notará que ele realmente imprime 16, que é o comprimento.
Portanto, é uma função muito fácil usar o comprimento de str. Se você quiser
copiar strings, use str compare.
E você deseja usar strn compare para realmente especificar os bytes.
Então aqui se tivermos meu nome é
Jason, e então criarmos outra string,
na verdade vamos apenas mantê-la. Nem precisaremos especificar
e o que vamos fazer é
dizer criar outra string chamada temp e
que será igual a str e
comparar, vamos passar o que queremos copiar para.
Basta criar um array de caracteres vazio e vamos
torná-lo um tamanho 50.
E o que vamos fazer aqui é dizer strn copy.
O primeiro parâmetro é onde queremos copiar do, vamos dizer temp.
O segundo parâmetro é o que queremos copiar, que é minha string.
E então não queremos passar mais de 50 bytes.
Portanto, podemos dizer o tamanho do temp para dizer que
não queremos passar mais de 50 bytes. E você provavelmente deseja fazer -1 para
o terminador nulo.
Desta forma, o terceiro parâmetro é muito importante porque nunca teremos buffer overflows.
Você deve sempre usar strn copy e não str copy.
E aqui podemos apenas exibir nossa string para ver se ela foi copiada.
Poderíamos dizer temp, altere para um por cento s.
E quando construirmos isso,
devemos ver, não o comprimento, devemos ver que a string é
algo assim e terminar com um ponto-e-vírgula.
Agora devemos compilar o que fazemos.
Agora vamos executá-lo. Devemos apenas ver nossa string que foi copiada.
Então, vemos que meu nome é Jason e que está
armazenado dentro da temperatura porque imprimimos a temperatura.
Mas sempre use cópia strn. Não use str copy,
isso garantirá que você não tenha buffer overflows.
E o terceiro parâmetro deve ser
sempre o destino, não a
fonte, o destino. Seria inútil dizer copie esta string inteira.
Porque se for menor, você vai ter problemas. Portanto, sempre diga o tamanho disso.
E você vê que pode usar o
operador sizeof para ver quantos bytes estão dentro do caractere.
Vamos falar sobre mais algumas funções.
Portanto, sabemos como obter o comprimento, sabemos como copiar strings, e sobre como concatenar strings.
A função str cap recebe dois argumentos, duas strings
como argumentos e copia a segunda string no final da primeira.
A segunda string não é
alterada, apenas a primeira. Ele retornará o valor de seu primeiro argumento.
O endereço do primeiro caractere da string à qual a segunda string é anexada.
Portanto, retorne algo, informando onde você realmente o anexou, caso precise usá-lo.
Aqui está um exemplo, criamos uma string de caracteres da minha string
e ela contém apenas a minha string com um terminador nulo.
Criamos uma cadeia de caracteres de entrada, que é 80, está vazia.
Dizemos que digite uma string a ser concatenada. Nós lemos isso em.
E então nós o concatenamos.
Imprimimos a string original seguida pela string concatenada e depois a entrada.
Depois disso, tudo o que você inseriu seria colocado
no final da minha string. Então, se você inserir Jason, será minha string espacial Jason.
É a isso que minha string seria igual.
Porque você faz um str cat nele.
Primeiro imprimimos a string e depois chamamos str cat nela.
A entrada realmente será igual a tudo o que foi inserido, minha
string seguida por tudo o que foi inserido.
Veremos este exemplo em um segundo. Agora, assim como str
copy, str cat também tem um strn end cat.
Portanto, a versão combinada se torna a nova primeira string.
Assim, assim como a concatenação de strings com str cat,
existe um strn cat.
Str cat tem o mesmo problema com str copy. Pode haver um estouro de buffer. Na verdade, não
garante que a segunda string caberá na primeira matriz.
Portanto, se você não tiver espaço suficiente no primeiro array, poderá ter problemas de estouro de buffer.
Então, o que você deseja usar um gato strn.
O segundo argumento indica o número máximo de caracteres a serem adicionados.
Por exemplo, se você fizer um strn cat
e dois bugs de strings em um complemento, isso só adicionará os primeiros 13 caracteres do complemento aos bugs,
dependendo do que vier primeiro. Se o complemento for menor que
13, ele só será adicionado até que você veja o terminador nulo.
Portanto, neste exemplo, estamos criando duas strings.
Esta é a origem deste destino. Estamos fazendo um strn cat.
Estamos copiando apenas 15 caracteres para o
destino no final. Portanto, qualquer que seja o tamanho do destino,
será o tamanho do destino mais 15 e então imprimimos.
Então, vamos examinar isso em blocos de código novamente.
Então, aqui está nosso exemplo e vamos criar duas matrizes de cadeias de
caracteres, uma de tamanho 50 e a outra de 50.
Faremos duas cópias str para defini-los como dados.
Este é o destino da fonte. E então, na linha 12, fazemos o strn cat.
E o destino será o que nos concatenaremos.
Portanto, a fonte será o que iremos concatenar.
E vamos atribuir apenas 15 caracteres.
Portanto, se a fonte fosse maior que 15,
não copiaríamos todos eles.
Então, quando construirmos e executarmos
isso, você verá que agora diz que
este é o arquivo de origem ou que este é o
destino seguido por este é a origem.
Portanto, diz que este é o destino, esta é a origem.
Ele concatenou isso no final do destino.
Portanto, você sempre deseja usar strn cat para concatenação, para que não haja buffer overflows.
Vamos falar sobre str compare, que eu fico dizendo acidentalmente em
vez de str copy, str compare.
Portanto, para comparar strings, temos que usar uma função.
Se você quiser comparar uma string com outra, você
não pode usar duplo igual, que só verifica as referências se você
tem ou não o mesmo endereço. Então, o que você precisa usar é str compare.
Isso vai comparar o conteúdo da string.
Ele não compara a matriz. Portanto, ele pode ser usado
para comparar strings armazenadas em matrizes de tamanhos diferentes.
Não compara personagens.
Você pode usar argumentos como maçãs e a entre aspas duplas, mas não
pode usar argumentos de caracteres como um único caractere a.
Esta função faz para strings o que os operadores relacionais fazem para números.
Portanto, a função de comparação
retornará um valor que informa se a string é igual ou não,
se é maior ou menor que.
Se for igual, ele retornará zero.
Se for menor que, ele retornará menor que zero, se str um
for menor que str dois.
E se str dois for menor que str um, ele retornará maior que zero.
E então o que exatamente isso significa? Bem, deixe-me fornecer um
exemplo de como isso funciona.
Vamos colocar isso nos blocos de código e executá-lo.
Mas aqui estamos fazendo um monte de comparações de str, e vamos dizer quais são os valores, se eles são
menores ou maiores do que porque não está muito claro.
Então, vamos dar uma olhada em blocos de código.
Então aqui está nosso exemplo. E estamos comparando um monte de strings e, em
seguida, exibindo os resultados de str
compare, seja zero um ou qualquer outra coisa.
Portanto, se você comparar duas strings a e a, elas devem estar entre aspas duplas.
E o que você vê aqui o que estamos fazendo é imprimir o que estamos chamando.
Portanto, estamos
delimitando as aspas. Estamos colocando a barra invertida para que realmente imprimamos um
caractere de aspas e não termine a string. Mas se compararmos a e
a, isso deve retornar zero. Porque zero significa que as strings são iguais.
Se compararmos aeb, str compare deve retornar menos
que.
Porque a é menor que b.
B a deve retornar um maior que zero.
Mas vamos examinar isso, certifique-se de não cometer nenhum
erro e veremos isso na saída.
Então, quando executamos
isso, você se lembra de quais números serão retornados.
Então, quando você compara a e a, você obtém 0.
Se você comparar aeb, b é menor que
a, então é um negativo, algo menor que zero,
eu poderia ter dito o contrário, veja,
mesmo eu ainda os confundo. Como a é maior que b, a
é maior que b, um negativo.
B é menor que a, então você obtém algo maior que zero que é um.
C é maior que a, então você obtém um, exatamente quando
b era maior que a.
E então você está comparando maiúsculas e minúsculas.
Quando você compara maiúsculas e minúsculas, ocorre o inverso. Z é na verdade
menor que a minúsculo.
Portanto, o capital é sempre menor do que minúsculo.
Se você tentar comparar maçãs e maçãs, será 1 porque maçã
é menos que maçãs.
E é assim que as comparações funcionam. É importante entender 0 maior que 1
ou menor que 1. Novamente, menos que
zero significa que a primeira string é menor que a
segunda string.
E maior que zero vai dizer que a primeira string é maior que a segunda string.
Esta função é muito fácil de usar. Você não precisa se preocupar com
nenhum tipo de comparação de strn porque não importa o tamanho dos arrays que
você está comparando.
A função str compare compara strings até encontrar caracteres correspondentes que sejam diferentes.
Portanto, pode ser até o final de uma das cordas.
A função de comparação de Strn compara as strings até que sejam diferentes ou até
que tenha comparado um número de caracteres especificados pelo terceiro argumento.
Portanto, neste caso, você não precisa usar strn
compare para buffer overflows. Ele existe, mas você só o
usaria se só quisesse comparar um determinado número de caracteres.
É usado de forma
diferente da str copy, strn copy ou strn cat.
O strn compare apenas diz que eu só quero exibir alguns caracteres.
Portanto, seria útil se você estiver procurando apenas um prefixo.
Portanto, se você quiser pesquisar strings que começam com
astro, pode limitar a pesquisa aos primeiros cinco caracteres
e usar strn compare desta forma.
Portanto, este exemplo você vê que dizemos igual a zero.
Você frequentemente vê uma instrução if como esta quando está usando str compare.
Você vê str compare dentro desta declaração e é igual a zero para dizer que é igual.
Portanto, strn compare usa os primeiros cinco caracteres,
compara astro aos primeiros cinco caracteres da astronomia.
Vai dizer que encontrou. Vai ser igual a zero e vai dizer astronomia fundada.
Se você fizer a mesma coisa, mas comparando-o a uma string diferente chamada
espantoso, ele não vai encontrar, na verdade vai mostrar - vai dizer
que espantoso é maior do que astro. Portanto, ele exibirá algo maior
que 0, que é 1 e não
exibirá nenhum dado.
Portanto, use str compare quando estiver comparando strings para todos os conteúdos.
Use strn compare quando quiser apenas comparar o prefixo a uma string.
O mesmo tipo de sintaxe ou strn compara apenas o terceiro argumento.
Falamos muito sobre algumas funções
realmente importantes que usaremos, principalmente str
length, strn copy, strn cat e strn compare.
Teremos um desafio em que você terá que utilizar essas funções para se
familiarizar com elas.
Mas você vai se familiarizar muito com isso
porque vai acabar usando-os continuamente. Obrigada.