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 :

Nombre de fois qu'apparaissent des chaines


Sujet :

C

  1. #1
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Par défaut Nombre de fois qu'apparaissent des chaines
    Bonsoir,
    Un autre probleme
    Commencons par un exemple :
    J'ai une liste d'adresse ip : (en fait j'ai 7447 lignes comme sa)
    229.216.99-84.rev.gaoland.net
    20151251065.user.veloxzone.com.br
    20151251065.user.veloxzone.com.br
    20151251065.user.veloxzone.com.br
    20151251065.user.veloxzone.com.br
    r200-125-62-131-dialup.adsl.anteldata.net.uy
    r200-125-62-131-dialup.adsl.anteldata.net.uy
    Et moi ce que je veux faire c'est prendre juste la fin, c'est a dire le net, br, uy, etc.... Et compter combien de fois apparaissent chaque lettre

    Pour cela, j'ai realisé ce code : Mais quand je compile il m'affiche une erreur a l'execution et aucune a la compilation

  2. #2
    Membre expérimenté
    Profil pro
    Dev
    Inscrit en
    Décembre 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Décembre 2007
    Messages : 191
    Par défaut
    Sur ce sujet il y a des astuces pour le débogage :

    http://www.developpez.net/forums/showthread.php?t=443

    ça te permettra de nous en dire plus sur ton erreur. (d'ailleurs, c'est quoi l'erreur?) , à moins que des motivés, dans leur grande bonté et infinie sagesse, se penchent sur ton code en détail.

  3. #3
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Par défaut
    Desolé mais tout ce qui est dit pour debogué je l'ai fait, sauf les commentaires.

  4. #4
    Membre chevronné Avatar de Pierre Maurette
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 283
    Par défaut
    Sans chercher plus loin, vous avez au moins un pétage de pile. Ajoutez
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        printf("%d\n", max * sizeof(struct adresseip));
        return 0;
    avant la déclaration de tablo et ce sera plus clair pour vous.
    tablo doit être déclaré dynamiquement ou mis en global (hezbollah, c'est très mal, blah, toussa...).

    Se méfier des tableaux et des multiplications de tailles, à partir de quelques dizaines d'octets, se poser la question de la mémoire prise dans la pile. Comme d'hab...

  5. #5
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Par défaut
    Citation Envoyé par Pierre Maurette Voir le message
    Sans chercher plus loin, vous avez au moins un pétage de pile. Ajoutez
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        printf("%d\n", max * sizeof(struct adresseip));
        return 0;
    avant la déclaration de tablo et ce sera plus clair pour vous.
    tablo doit être déclaré dynamiquement ou mis en global (hezbollah, c'est très mal, blah, toussa...).

    Se méfier des tableaux et des multiplications de tailles, à partir de quelques dizaines d'octets, se poser la question de la mémoire prise dans la pile. Comme d'hab...
    Salut,
    Tout d'abord, merci de l'interet que tu portes a mon sujet.
    Sinon, un peu plus d'explications seraient les bienvenus. J'ai ajouté le printf juste avant la declaration et toujours erreur a l'execution.
    Et le probleme, c'est que la declaration globale, je la proscrit. Quand a l'allocation dynamique, je ne vois pas comment faire, puisque je ne connais pas forcement la taille de mon fichier.

    Merci encore
    Gomu.

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par GomuSan Voir le message
    Je ne vois pas comment un printf corrigerait mon code.
    Le but n'est pas de corriger, mais de te faire prendre conscience de la taille de l'objet demandé, qui est évidemment beaucoup trop gros pour la mémoire automatique.
    Et le probleme, c'est que la declaration globale, je la proscrit. Quand a l'allocation dynamique, je ne vois pas comment faire, puisque je ne connais pas forcement la taille de mon fichier.
    Tu peux définir une variable statique de portée locale dans main() avec 'static'.
    Sinon, il n'y a pas de problème avec la mémoire dynamique. Il suffit de mesurer la taille requise avant l'allocation.

    Enfin, on peut allouer dynamiquement une taille fixe.

  7. #7
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Par défaut
    Oui desolé, j'avais pas bien saisi. Donc Comme c'est un gros projet. J'avais deja fais une fonction qui me retourne le nombre de connexions.

    Donc j'ai fais appel a cette fonction pour allouer dynamiquement.
    Mais toujours le meme probleme :S

  8. #8
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Par défaut
    En fait, j'ai decomposé mon code, pour voir a partir de quel moment sa planté. J'ai remarqué que c'etait le code ou je veux prendre uniquement la fin de la chaine de caracteres :
    Je vous explique ce que fais ce code.
    J'ai un fichier, avec a chaque ligne une adresse ip :
    229.216.99-84.rev.gaoland.net
    20151251065.user.veloxzone.com.br
    20151251065.user.veloxzone.com.br
    20151251065.user.veloxzone.com.br
    Moi ce que je veux faire, c'est prendre toutes les lettres qui sont après le point. c'est a dire net, br, fr...
    Le probleme, c'est que ce code marche avec une seule ip, et quand je fais une boucle pour le faire sur plusieurs ip, sa plante.


    Merci

  9. #9
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par GomuSan Voir le message
    En fait, j'ai decomposé mon code, pour voir a partir de quel moment sa planté. J'ai remarqué que c'etait le code ou je veux prendre uniquement la fin de la chaine de caracteres :
    strrchr() ?

  10. #10
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Par défaut
    BIG EDIT :
    Merci beaucoup, j'ai reussi a utiliser strrchr
    Mais le probleme c'est que sa me prend le point :S

    Re EDIT :
    Sa marche, j'ai resolu mon probleme.

    Je vous tiens au courant pour la suite du code.

    Merci beaucoup

  11. #11
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par GomuSan Voir le message
    Ok il renvoie un pointeur. Mais qu'est-ce que j'en fais ?
    C'est, à une vache près, l'adresse de la chaine que tu cherches. Ca ne te convient pas ?

    Qu'est-ce qui t'empêche de faire un petit essai comme ça pour voir ce qui se passe :
    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
    16
    17
     
    #include <stdio.h>
    #include <string.h>
     
    int main (void)
    {
       char const *s = "aa.bb.cc";
     
       char *p = strrchr (s, '.');
     
       if (p != NULL)
       {
          printf ("'%s'\n", p);
       }
     
       return 0;
    }
    Ca donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    '.cc'
     
    Press ENTER to continue.
    Si le point ne ne convient, pas, tu affiches à partir de p+1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
       if (p != NULL)
       {
          printf ("'%s'\n", p + 1);
       }
    ce qui donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    'cc'
     
    Press ENTER to continue.
    faut un peu apprendre à se prendre en main, on ne sera pas toujours derrière...

  12. #12
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Par défaut
    Erf, Merci mais tu n'avais pas lu mon edit

  13. #13
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Par défaut
    Promis, la derniere fois que je vous embete
    Nouveau code. J'ai testé sur papier, j'y ai reflechi bien comme il faut, j'ai essayé de le faire d'une maniere on ne peut plus logique. j'ai testé "a la main"

    En fait le probleme vient de la taille je pense.
    Lorsqu'au lieu de max, je met par exemple 10, sa marche correctement. Mais avec max, rien du tout, il me dit


    Merci

  14. #14
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Par défaut
    Salut,

    Meme si personne m'a aidé sur la fin
    J'ai reussi a regler le probleme.

    Maintenant, mon probleme c'est que sa met 20 secondes a s'afficher...

    Comment y remedier?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PowerShell] Compter le nombre de fois qu'apparaît un chaine dans un fichier
    Par olivierjouanno dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 16/04/2014, 16h07
  2. [XL-2007] Pourcentage sur des chaines et non des nombres
    Par sebinou86 dans le forum Excel
    Réponses: 2
    Dernier message: 02/11/2010, 23h10
  3. Réponses: 2
    Dernier message: 03/05/2010, 17h11
  4. le nombre de fois que l'on trouve une chaine dans le formulaire
    Par mioke dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/08/2009, 18h05
  5. Réponses: 1
    Dernier message: 22/10/2007, 15h02

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