Compter les occurrences d'un caractère dans une chaîne
La recherche de la meilleure façon de le faire en VB6. En règle générale, je voudrais utiliser cette approche...
' count spaces
For i = 1 To Len(text)
If Mid$(text, i, 1) = " " Then count = count + 1
Next
- Voulez-vous compter des espaces ou des caractères distincts?
- quel est le problème avec cette approche?
- Si vous êtes à la recherche pour compter les caractères ou des caractères spécifiques? Votre titre l'indique "unique", votre échantillon suggère "spécifique".
- La seule chose que je voudrais ajouter, c'est de déplacer le Len(texte) à l'EXTÉRIEUR de la Pour les, de l'enregistrer dans une variable.
- VB6 chaînes sont stockées en format BSTR, de sorte que la longueur de la fonction est en O(1), c'est donc qu'une petite optimisation. Le compilateur serait susceptible de l'obtenir.
- Je veux compter un caractère particulier dans une chaîne de caractères, même si mon exemple est un espace.
- Je le savais, mais vous ne pouvez pas optimiser beaucoup d'autres choses le code 🙂 à Moins que le comte ou le texte de la variante 🙂 🙂
- vrai, mais c'est probablement plus rapide de comparer les valeurs ascii de chaînes littérales. De Plus, l'auteur du commentaire de changer la nature de la question... arg
- Pour répondre à Beth question, récemment, je suis allé d'être membre d'une taille moyenne de l'équipe de développement d'être un lone-wolf responsable de garder un projet en cours. J'aimerais avoir des gens intelligents examen de ma solution à un problème. J'aime apprendre des autres. Stackoverflow est un très bon substitut!
- VB évalue seulement la
To
expression une fois de toute façon. C'est unFor
boucle, pas unDo While
boucle. - J'ai changé votre question titre, le titre et ce que vous sont actuellement demandant de ne pas correspondre.
Vous devez vous connecter pour publier un commentaire.
Je voudrais utiliser une version modifiée de seau de tri:
...et le résultat est dans
count
. L'exécution est O(N) - siMid$
est O(1).Modifier:
Basé sur vos éclaircissements, ce faire:
Ascii compare être plus rapide que la comparaison de chaînes de caractères. J'avais profil juste au cas où, mais je suis assez sûr.
AscW
sera encore plus rapide, depuis VB6 chaînes Unicode en internePas dire que c'est la meilleure façon, mais vous ne:
Utiliser la commande diviser comme ce
Vous pouvez les combiner en une seule ligne.
J'ai fait un peu brut de timing sur elle. Sur les 40.000 chaîne de caractères avec tous les espaces, il semble horloge à 17 millisecondes sur un 2.4 GHz Intel Core 2 processeur.
Une fonction qui pourrait ressembler à ce
Il n'est pas clair ce que tu veux dire par la meilleur façon de le faire.
Si vous voulez quelque chose de très rapide, mais totalement difficile à maintenir, d'adapter cette horrible code qui plonge dans la mémoire sous-jacente d'une VB6 chaîne de compter le nombre de mots. Courtoisie de VBspeed.