Strings em C

Este artigo foi movido para o PontoV, se quiser acessá-lo, basta clicar aqui.

Anúncios

10 Responses to Strings em C

  1. Murilo Adriano disse:

    Legal… eu não sabia que o ” é o mesmo que ” ou o (char)0.
    Lembrando que aquela função de comparação de strings só funciona se as duas strings tiverem o mesmo tamanho. Se tivermos str1 == “asda” e str2 == “asdajoja” por exemplo, a função saoIguais retornaria verdadeiro.

    Abraço!

  2. bcsanches disse:

    Murilo,

    o ‘\ 0’ nao eh o mesmo que char 0, o wordpress comeu o “barra zero”! Tenho que colocar um espaco entre a \ e o 0, senao some…mas o certo é tudo junto.

    A funcao saoIguais funciona nesse caso que voce comentou, deu erro com voce?

  3. Tasso Evangelista disse:

    Muito bom não só o artigo, mas todo o blog! Parabéns!

    Mas confirmando o que foi dito, na função saoIguais acredito que a condicional correta seria (s1[i] == 0 && s2[i] == 0); assim, verifica-se que ambas terminam com o mesmo tamanho. Também acho que é interessante salientar que o uso das funções da biblioteca string.h é recomendado pois seu código foi otimizado pela escrita com assembly. Deste modo, em qualquer grau de otimização. as funções strlen, strcmp, etc. já estam otimizadas ao máximo. Isso não impede que o usuário faça suas funções com otimização idêntica, mas o linker já coloca essas funções por default (acho), o que implicaria em duplicação de código. Tá, também é verdade que estaríamos reinventando a roda : D

    Abraços e muito sucesso!

  4. bcsanches disse:

    Tasso,

    obrigado pelos elogios!

    sobre seus comentarios, ai vai:

    o if somente vai ser executado se o bloco do for for executado, e a condicao do for:
    s1[i] == s2[i]

    Ou seja, quando o if eh executado s1[i] e s2[i] sao iguais, entao nao existe necessidade de testar ambas.

    Eu comento em algum lugar que deve-se usar as funcoes da string.h ou de qualquer outra lib padrao ao inves de tentar re-escrever a sua. Nao somente por questao de evitar re-inventar a roda, mas bugs que vc pode causar (nao confie tanto na sua capacidade, a gente sempre erra).

    Sobre assembly, nao existe garantia, e o codigo em assembly nao eh garantia de ser mais rapido. Mas sim, a maioria dos compiladores vem com versoes bem otimizadas dessas funcoes.

    voce pode ate conseguir fazer uma versao mais otimizada, mas é dificil de se fazer e na maoria das vezes nao vale a pena o ganho que voce tem.

    Abracos

  5. Tasso Evangelista disse:

    Ops! Falha minha! : )

    Quanto a questão das funções nativas do compilador, se eu desejasse somente verificar se duas strings são iguais, ainda assim a strcmp seria mais veloz, sendo que ela também compara a ordem das strings?

  6. bcsanches disse:

    Tasso nao posso garantir se seria mais rapido ou nao que a saoIguais. Acredito que sim porque no visual por exemplo a funcao strcmp eh bem otimizada, comparando uma palavra (WORD, nao palavra da string) inteira, e nao char a char…

    Quanto a comparar apenas se sao iguais ou nao, com o pouco que sei de assembly, acredito que nao faria diferenca, pois para ver se sao iguais, voce usaria a instrucao cmp, que tambem seria usada para se verificar se vem antes ou depois. Pelo que me lembro, voce pode checar se sao iguais, menor ou maior com apenas uma chamada a cmp, depois usando jumps com os flags, ou seja a diferenca seria insignificante.

    A minha regra é sempre usar o que tiver na lib padrao, somente re-escrevo algo se eu tiver algum problema de performance e existir um caso bem especifico para qual eu poderia otimizar e tivesse algum ganho sginificativo, fora isso lib padrao.

  7. Tasso Evangelista disse:

    Tá certo, obrigado pelos esclarecimentos e pelo ótimo tutorial!

  8. UoU… Isso foi bem útil cara. Estou criando um jogo de aventura em modo texto, ascii-art, e precisei disso por causa duma sequencia que tem que acertar para abrir uma porta. Quando terminar o jogo volto a comentar aqui.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: