À la recherche de la meilleure façon de le faire dans VB6. En règle générale, j'utiliserais cette approche ...
' count spaces For i = 1 To Len(text) If Mid$(text, i, 1) = " " Then count = count + 1 Next
4 Réponses :
Ne pas dire que c'est le meilleur moyen, mais vous codez:
distinctChr = " " count = Len(text) - Len(Replace(text, distinctChr , ""))
J'aime l'approche terrese sur cette réponse.
Ceci est devenu une meilleure réponse une fois la question modifiée. :)
Bel exemple de programmation de canaux ( Joelonsoftware.com/ 2009/09/23 / le programmeur-gamme de canaux ). Je l'aime beaucoup.
Je voudrais utiliser un type de godet modifié: ... et votre résultat est dans Basé sur votre Clarification, faites ceci: p> compte code>. La performance est O (n) - si
MID $ code> est O (1). P>
' count spaces
Dim asciiToSearchFor As Integer
asciiToSearchFor = Asc(" ")
For i = 1 To Len(text)
If Asc(Mid$(text, i, 1)) = asciiToSearchFor Then count = count + 1
Next
Très belle réponse! Même si, je n'ai pas précisé ASCII comme une exigence, j'aime l'idée de limiter ma recherche une gamme de caractères spécifique. Souvent mon problème correspond à cette solution bien.
Je suppose que ascw code> sera encore plus rapide, car les chaînes VB6 sont unicode
Ce n'est pas clair ce que vous entendez par le meilleur em> comment faire cela. p>
Si vous voulez quelque chose très em> rapide, mais totalement em> immeuble, adaptez ce code horrible qui figure dans la mémoire sous-jacente d'une chaîne VB6 pour compter le nombre de mots. Courtesy de VBSpeed . P>
Utilisez la commande fractionnée comme celle-ci
Function CountChar(ByVal Text As String, ByVal Char As String) As Long Dim V As Variant V = Split(Text, Char) CountChar = UBound(V) End Function
J'ai aussi aimé cette réponse. Si je pouvais accepter deux réponses pour une question, j'accepterais aussi votre réponse.
Voulez-vous compter des espaces ou des caractères distincts?
Quel est le problème avec cette approche?
Alors cherchez-vous à compter des caractères uniques ou des caractères spécifiques? Votre titre suggère "unique", votre échantillon suggère "spécifique".
La seule chose que j'ajouterais est de déplacer le len (texte) en dehors de le pour, le sauver dans une variable.
@xanatos - VB6 Strings sont stocké au format BSTR , donc la fonction de longueur est O ( 1), donc ce n'est qu'une optimisation mineure. Le compilateur l'obtiendrait probablement.
Je veux compter un caractère spécifique dans une chaîne, même si mon exemple utilise un espace.
@Scott je savais, mais vous ne pouvez pas optimiser beaucoup d'autre du code :-) sauf si le nombre ou le texte est une variante :-) :-)
@Xanatos - True, bien qu'il soit probablement plus rapide de comparer les valeurs ASCII que des chaînes littérales. De plus, le commentaire de l'auteur vient de changer la nature de la question ... ARG
Pour répondre à la question de Beth, je suis récemment passé d'être membre d'une équipe de Dev de taille moyenne pour être un loup solitaire responsable de conserver un projet. Avoir des gens intelligents manquent de revoir ma solution à un problème. J'aime apprendre d'autres personnes. Stackoverflow est un excellent substitut!
@xanatos @scott VB n'évalue que l'expression
à code> une fois de toute façon. C'est un
pour code> boucle, pas un
faire pendant code> boucle.
@ Garykindel: J'ai changé votre titre de question, le titre et ce que vous demandez réellement ne correspondent pas.