Extraire lettre dans un string

Résolu
spmsbl Messages postés 51 Date d'inscription lundi 2 octobre 2006 Statut Membre Dernière intervention 14 février 2013 - 20 avril 2010 à 21:30
spmsbl Messages postés 51 Date d'inscription lundi 2 octobre 2006 Statut Membre Dernière intervention 14 février 2013 - 23 avril 2010 à 19:30
Bonjour

Je dois extraire certaine lettre (différente) dans plusieurs string

exemple, combien il y a de ``a`` de ``f`` de ``g`` et de ``s`` dans abcdefffgijkl

Quelle méthode est ce que je devrais utiliser split ?

Merci d'avance pour vos suggestions

11 réponses

cs_GG29 Messages postés 326 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 8 février 2011 17
21 avril 2010 à 10:31
Pourquoi ne pas faire tout simplement
int count = 0;
foreach(char c in s)
{
    if(c == 'a')
        count++;
}



---
Généralement le bug se situe entre le clavier et la chaise.
Le temps est une "chose" introuvable dont l'existence ne fait aucun doute.
3
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
22 avril 2010 à 22:12
La solution la plus rapide est fort probablement une solution avec boucle for, similaire à celle proposée ci-dessus:

   int count = 0;
            for (int i = 0; i < s.Length - 1; i++)
            {
                if(s[i] == 'l') count++;
            }




[hr]
-Site personnel-
-Blog-
3
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
22 avril 2010 à 00:25
Les codes proposés fonctionnent parfaitement
tu devais mal les utiliser voici pour ta culture un exemple rapide

            //Chaine
            string taChaine = "abafjdsklgjlajdfklsjgklaa";
            
            //Lambda
            int nb taChaine.Count(c> c == 'a');
            button1.Content = nb.ToString();
            //Linq
            nb = (from c in taChaine
                  where c == 'a'
                  select c).Count();
            button1.Content += " " + nb.ToString();
            //Regexp
            var reg = new System.Text.RegularExpressions.Regex("a");
            nb = (reg.Matches(taChaine)).Count;
            button1.Content += " " + nb.ToString();
            //Split
            nb = (taChaine.Split('a')).Length - 1;
            button1.Content += " " + nb.ToString();

1
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
20 avril 2010 à 21:52
Salut,

Le split peut-être une solution
Une regex peut faire l'affaire aussi
Et encore mieux une expression linq
cf http://msdn.microsoft.com/en-us/library/bb397915%28v=VS.100%29.aspx
et les autres elements dans le treeview

Ou la methode ancienne les boucles

Apres à toi de trouver la plus optimisée
(je pencherais pour la mèthode linq) a voir.

Merci de compléter avec tes expériences et résultats.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_GG29 Messages postés 326 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 8 février 2011 17
20 avril 2010 à 22:14
combien il y a de ``a`` de ``f`` de ``g`` et de ``s`` dans abcdefffgijkl

Avec linq ca va très vite
taChaine.Count(c => c == 'a')


---
Généralement le bug se situe entre le clavier et la chaise.
Le temps est une "chose" introuvable dont l'existence ne fait aucun doute.
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
20 avril 2010 à 22:22
J'avais oublié la version lambda ;-)
Le linq est traduit en lambda à la compilation. ;-)

Bon dev
0
spmsbl Messages postés 51 Date d'inscription lundi 2 octobre 2006 Statut Membre Dernière intervention 14 février 2013
21 avril 2010 à 04:23
Merci pour vos réponse mais ca ne fonctionne pas !

Je croyais que c'était simple de compter des lettres dans une chaine de caractères ! avec split je ne suis pas certain de comment écrire ma formule et je n'arrive pas a trouver un exemple concret sur le NET. Avec Linq (ce que GG29 a proposer) mon programme ne plante pas mais il ne compte rien !?

Merci d'avance pour vos suggestions
0
deadhand Messages postés 152 Date d'inscription dimanche 15 octobre 2006 Statut Membre Dernière intervention 27 août 2010 3
21 avril 2010 à 10:14
Ben t'as qu'a le faire à la main !

Deux solutions :
- Une boucle qui fait un substring de taille 1 sur ton string

- Tu fait string->toCharArray, tu parcours le tableau en cherchant tes charactères !
0
deadhand Messages postés 152 Date d'inscription dimanche 15 octobre 2006 Statut Membre Dernière intervention 27 août 2010 3
21 avril 2010 à 10:45
Ben voilà !
0
spmsbl Messages postés 51 Date d'inscription lundi 2 octobre 2006 Statut Membre Dernière intervention 14 février 2013
21 avril 2010 à 20:19
Merci beaucoup a vous deux !!

Ca marche super !
0
spmsbl Messages postés 51 Date d'inscription lundi 2 octobre 2006 Statut Membre Dernière intervention 14 février 2013
23 avril 2010 à 19:30
Merci beaucoup Bidou !!

C'est encore mieux, c'est ce que je cherchais comme réponse
0
Rejoignez-nous