Extraire lettre dans un string [Résolu]

Signaler
Messages postés
51
Date d'inscription
lundi 2 octobre 2006
Statut
Membre
Dernière intervention
14 février 2013
-
Messages postés
51
Date d'inscription
lundi 2 octobre 2006
Statut
Membre
Dernière intervention
14 février 2013
-
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

Messages postés
326
Date d'inscription
vendredi 23 décembre 2005
Statut
Membre
Dernière intervention
8 février 2011
13
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.
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
49
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-
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
27
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.
Messages postés
326
Date d'inscription
vendredi 23 décembre 2005
Statut
Membre
Dernière intervention
8 février 2011
13
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.
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
27
J'avais oublié la version lambda ;-)
Le linq est traduit en lambda à la compilation. ;-)

Bon dev
Messages postés
51
Date d'inscription
lundi 2 octobre 2006
Statut
Membre
Dernière intervention
14 février 2013

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
Messages postés
157
Date d'inscription
dimanche 15 octobre 2006
Statut
Membre
Dernière intervention
27 août 2010
4
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 !
Messages postés
157
Date d'inscription
dimanche 15 octobre 2006
Statut
Membre
Dernière intervention
27 août 2010
4
Ben voilà !
Messages postés
51
Date d'inscription
lundi 2 octobre 2006
Statut
Membre
Dernière intervention
14 février 2013

Merci beaucoup a vous deux !!

Ca marche super !
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
27
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();

Messages postés
51
Date d'inscription
lundi 2 octobre 2006
Statut
Membre
Dernière intervention
14 février 2013

Merci beaucoup Bidou !!

C'est encore mieux, c'est ce que je cherchais comme réponse