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 :

Supprimer l'accent d'un caractère


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de odsen.s
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 269
    Par défaut Supprimer l'accent d'un caractère
    Bonjour,

    Pour m'entraîner en C, je suis en ce moment en train de programmer un jeu d'entraînement au scrabble en console. Je suis sous Windows.

    Je veux charger un fichier texte contenant 300 000 mots de la langue française en mémoire, j'y arrive sans soucis.

    Seulement, je n'arrive pas à supprimer les accents des caractères.
    J'utilise la fonction ASCII_noacc_ansi(int c) de CLIB (ascii.h) qui doit retourner le caractère sans son accent.
    Les accents sont toujours là quand j'affiche les mots à l'écran.

    Voici la partie de code concernée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    /* i sera incrémenté à chaque ligne lue */
    for(i = 0; c != EOF; ++i)
    {
      /* on lit les caractères de la ligne jusqu'à l'espace ou la tabulation (on est alors en dehors du mot) */
      for(j = 0; (c = fgetc(fichierDico)) != '\t' && c != ' '; ++j)
      {
        /* on supprime l'accent du caractère, puis on met en majuscule */
        dico[i][j] = toupper(ASCII_noacc_ansi(c));
      }
     
      /* on passe à la ligne suivante */
      while((c = fgetc(fichierDico)) != '\n' && c != EOF);
    }
    Sauriez-vous d'où peut venir le problème ?
    Par avance, merci.

  2. #2
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 528
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 528
    Par défaut
    je n'ai pas le temps de consacrer plus d'attention mais je suggere de passer pas-a-pas dans la fonction en deboguage.
    Peut-etre qu'elle n'est pas adaptee je ne sais pas...
    COmment sont affichees les chaines de caracteres ?

  3. #3
    Membre éclairé
    Avatar de odsen.s
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 269
    Par défaut
    Merci de porter de l'attention à mon problème.
    J'affiche les chaînes avec printf :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for(i = 0; i < nbLignes; ++i)
    {
      printf("%s\n", dico[i]);
    }

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    534
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 534
    Par défaut
    Salut,

    C'est l'algo qui ne va pas, pas la fonction.

  5. #5
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    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 dj.motte
    Salut,

    C'est l'algo qui ne va pas, pas la fonction.
    Merci !

  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 : 68
    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 odsen.s
    Pour m'entraîner en C, je suis en ce moment en train de programmer un jeu d'entraînement au scrabble en console. Je suis sous Windows.

    Je veux charger un fichier texte contenant 300 000 mots de la langue française en mémoire, j'y arrive sans soucis.

    Seulement, je n'arrive pas à supprimer les accents des caractères.
    J'utilise la fonction ASCII_noacc_ansi(int c) de CLIB (ascii.h) qui doit retourner le caractère sans son accent.
    Les accents sont toujours là quand j'affiche les mots à l'écran.
    Hé hé
    336531 words processed

    Press ENTER to continue.
    EDIT : Ajouté commentaires dans le fichier attaché.
    Fichiers attachés Fichiers attachés
    • Type de fichier : c main.c (1,9 Ko, 57 affichages)

  7. #7
    Membre éclairé
    Avatar de odsen.s
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 269
    Par défaut
    Bonjour,

    dj.motte a écrit :
    Salut,

    C'est l'algo qui ne va pas, pas la fonction.
    Emmanuel Delahaye a écrit :
    Merci !
    Héhé, je n'ai pas dit que c'était la fonction en elle même qui posait problème (je m'en suis déjà servi ailleurs sans problème).

    Un petit commentaire sur ton code serait le bienvenu, emmanuel, je ne le comprends pas bien

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    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 odsen.s
    Un petit commentaire sur ton code serait le bienvenu, emmanuel, je ne le comprends pas bien
    Bah, c'est un simple switch-case, je ne vois pas bien ce qu'il faut commenter...

    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
    18
    19
    20
    21
    22
     
    /* ---------------------------------------------------------------------
       ASCII_noacc_ansi()
       ---------------------------------------------------------------------
       Retourne un caractere non accentue a partir d'un caractere
       quelquonque (ASCII etendu ANSI uniquement)
       ---------------------------------------------------------------------
       E : caractere
       S : caractere filtre
       --------------------------------------------------------------------- */
    int ASCII_noacc_ansi (int const c)
    {
       switch ((char)c)
       {
       case 'à':
       case 'á':
       case 'â':
       case 'ã':
       case 'ä':
       case 'å':
          return 'a';
       /* etc. */
    Qu'est-ce que tu ne comprends pas ?

  9. #9
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut
    Bonjour Emmanuel,

    Je pense que odsens.s voulait parler du code que tu as annexé "main.c".

  10. #10
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    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 jowo
    Bonjour Emmanuel,

    Je pense que odsens.s voulait parler du code que tu as annexé "main.c".
    Fait.

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

Discussions similaires

  1. [Chaînes] Supprimer les accents
    Par navis84 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 17/10/2006, 11h11
  2. Supprimer les accent dans une chaine
    Par avigeilpro dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 12/09/2006, 11h04
  3. supprimer 2 les 2 premiers caractères d'un fichier.
    Par menuge dans le forum Langage
    Réponses: 8
    Dernier message: 02/08/2006, 09h00
  4. [ASE][12.5] Supprimer les accents
    Par Semhur dans le forum Sybase
    Réponses: 3
    Dernier message: 02/05/2006, 11h33
  5. [String] Comment supprimer les accents
    Par iuz dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 08/03/2004, 02h58

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