strstr() pour une chaîne qui n'est PAS null

Comment dois-je faire le en place équivalent de strstr() pour un compté chaîne (c'est à dire pas null) dans C?

  • Vous devrez écrire votre propre version.
  • Quelle chaîne de caractères n'est pas nul? La chaîne de recherche en cours, ou de la sous-chaîne de caractères?
  • Une recherche en cours (meule de foin).
  • Ce n'est pas exactement banal... je pourrais essayer de KMP ou quelque chose si j'ai vraiment besoin de le faire, mais je préfère éviter si je peux.
  • Vous pouvez voler de la mise en œuvre de strnstr() de BSD. Mais ce bug: mikeash.com/pyblog/dont-use-strnstr.html
  • Merci pour le lien, je vais jeter un oeil mais ce lien me rend un peu nerveux, haha.
  • Avez-vous regardé Boyer-moore chaîne de recherche? Il fonctionne très bien sans résiliation de \0s et O(4*n).
  • J'avais entendu parler une fois, mais je sais peu de choses sur elle et je l'avais totalement oublié, je vais regarder ça, merci!
  • Oui, Boyer-Moore est très bon. C'est un peu plus compliqué que KMP, donc si vous ne trouvez pas un ready-made de mise en œuvre, il peut ne pas être utile pour faire cuire vous-même. Si la performance est vraiment important, je voudrais cependant vous recommandons de BM, surtout si les aiguilles sont longues. (Dans le meilleur des cas, BM ne regarde que chaque mème caractère.)
  • la glibc a memmem (l'aiguille et la botte de foin à la fois pris en compte), je suis sûr qu'il y aura un domaine public de la mise en œuvre là aussi.

InformationsquelleAutor Mehrdad | 2011-12-21