IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

caractere dans une chaine


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Novembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 10
    Par défaut caractere dans une chaine
    salut
    qui a une idee pour ecrire une fonction quie retourne le caractere le plus utilisé dans une chaine de caractere
    moi je fait ça mais probleme!!:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    char nbappar(char b[z])
    {
    char y,mo;
    int i,ap,max=0;
    for(y='A';y<='Z';y++)
    {ap=0;
    	for(i=0;i<z;i++)
    		if (y==b[i])
    		 ap++;
    		 if (max<ap)
    			  {max=ap;
    			  mo=y;}
    }
    return mo;
    }

  2. #2
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 084
    Par défaut
    Bonjour,

    Citation Envoyé par michall Voir le message
    moi je fait ça mais probleme!!:
    Decrivez le probleme un peu mieux.

    En l'occurence, a vu de nez, je dirai ceci :

    Citation Envoyé par michall Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    char nbappar(char b[z])
    {
    char y,mo;
    int i,ap,max=0;
    for(y='A';y<='Z';y++)
    {ap=0;
    	for(i=0;i<z;i++)
    		if (y==b[i])
    		 ap++;
    		 if (max<ap)
    			  {max=ap;
    			  mo=y;}
    }
    return mo;
    }
    "z undeclared", non ?


    J'ai une idée pour faire ca :

    Tu fais un tableau de 26 case. La case 0 represente "a" ou "A", la case 1 "b" ou "B" ...
    Tu initialise le tableau a 0, puis tu parcours une unique fois ta chaine avec strlen et non z, car ce n'est pas comme ca que ca marche.

    Puis, une fois que cela est fini, tu parcours le tableau de 26 case afin de determiner quel est la case, et donc la lettre ayant le plus grand nombre. Si tu veux differencier minuscule/majuscule, il faut faire un tableau de 52 case ou deux tableau de 26 case ou ... ( a toi de voir).

  3. #3
    Membre habitué
    Inscrit en
    Novembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 10
    Par défaut
    mais pourquoi le tableau de 26...!!!!
    il y a for(y=A.....
    esemple:
    si b=ABNDHDNKBBBVFJBBFKJDBBBBBBB
    alors return 'B'

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Là, on a l'histoire du compromis entre vitesse et mémoire.
    • Avec un tableau de 256 entiers, on peut compter les occurrences de chaque caractère possible, en une seule fois, puis chercher le plus grand, le tout en temps linéaire (méthode conseillée par SofEvans).
    • Sans, on doit parcourir la chaîne pour chaque caractère à tester, ce qui donne un temps quadratique (méthode que tu sembles avoir proposée, mais mal écrite).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 084
    Par défaut
    Je me suis certainement mal expliqué :

    Le tableau de 26 case represente les lettre de l'alphabet. Tu parcours ta chaine, et pour chaque lettre tu incremente la bonne case de 1. Ensuite, tu parcours ton tableau de 26 case pour determiner le plus grand.

    @Medinoc, ton doigt a dérapé ? 256 entier ?

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    @SofEvans: Non, mon doigt n'a pas dérapé: Quitte à faire un tableau pour les caractères d'une chaîne, autant accepter toutes les valeurs possibles. Une variante en fait, mais ça reste plus proche de ta méthode que de celle de michall.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. [C#] Comment remplacer caracteres dans une chaine ?
    Par ChristopheOce dans le forum C#
    Réponses: 6
    Dernier message: 07/09/2011, 15h46
  2. Compter le nombre de caractere dans une chaine
    Par jmjmjm dans le forum C++
    Réponses: 13
    Dernier message: 19/11/2006, 11h37
  3. fct pour lire autant de caracteres dans une chaine?
    Par jeanfrancois dans le forum Langage
    Réponses: 3
    Dernier message: 30/03/2006, 15h45
  4. Réponses: 2
    Dernier message: 12/01/2006, 08h34
  5. [langage] compter des caracteres dans une chaine
    Par louisis dans le forum Langage
    Réponses: 3
    Dernier message: 18/05/2004, 22h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo