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 :

Chaîne de caractères


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 67
    Par défaut Chaîne de caractères
    bonjour,
    si on veut créer une fonction qui dans une chaîne de caractère, convertit les majuscules en minuscules, et les minuscules en majuscules, comment faudrait-il procéder ?
    merci.

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    si on veut créer une fonction qui dans une chaîne de caractère, convertit les majuscules en minuscules, et les minuscules en majuscules, comment faudrait-il procéder ?
    Il faudrait lire la documentation des fonctions de la bibliothèque standard et ainsi trouver les deux fonctions qui font la conversion minuscules <-> majuscules.

  3. #3
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Un pointeur sur la chaîne en argument de la fonction. Dans la fonction, une boucle qui parcours la chaîne caractère par caractère et pour chaque caractère, du détermine s'il est en majuscule ou minuscule avec les fonctions islower et isupper et tu fait l'opération qui va bien avec les fonctions tolower/toupper

    Fait la fonction et reviens ici
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  4. #4
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par Franck.H Voir le message
    Un pointeur sur la chaîne en argument de la fonction. Dans la fonction, une boucle qui parcours la chaîne caractère par caractère et pour chaque caractère, du détermine s'il est en majuscule ou minuscule avec les fonctions islower et isupper et tu fait l'opération qui va bien avec les fonctions tolower/toupper
    Pff, c'est difficile de faire chercher les POs par eux-mêmes, dans ce forum...

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par DaZumba Voir le message
    Pff, c'est difficile de faire chercher les POs par eux-mêmes, dans ce forum...
    Ouais En fait je ne le met que sur la voie, c'est à lui de coder la fonction
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 52
    Par défaut
    Dans ta fonction recevant comme parametre un pointeur sur la chaine a transformer,

    Tu déclares un pointeur (char *pt)que tu initialises sur le début de ta chaîne.
    si *pt est compris entre 'a' et 'z',
    tu y rajoutes 'A'-'a'
    sinon
    si *pt est compris entre 'A' et 'Z', tu y rajoutes 'a'-'A'

    tu incrémentes ton pointeur jusqu'à ce que tu rencontre le 0 de fin de chaîne.

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Fred83 Voir le message
    si *pt est compris entre 'a' et 'z'
    Ceci n'est pas portable. Faut utiliser "islower()"
    Citation Envoyé par Fred83 Voir le message
    tu y rajoutes 'A'-'a'
    Idem => passer par "toupper()"
    Citation Envoyé par Fred83 Voir le message
    si *pt est compris entre 'A' et 'Z'
    => isupper()
    Citation Envoyé par Fred83 Voir le message
    tu y rajoutes 'a'-'A'
    => tolower()
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  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 Fred83 Voir le message
    Dans ta fonction recevant comme parametre un pointeur sur la chaine a transformer,

    Tu déclares un pointeur (char *pt)que tu initialises sur le début de ta chaîne.
    si *pt est compris entre 'a' et 'z',
    tu y rajoutes 'A'-'a'
    sinon
    si *pt est compris entre 'A' et 'Z', tu y rajoutes 'a'-'A'

    tu incrémentes ton pointeur jusqu'à ce que tu rencontre le 0 de fin de chaîne.
    Bah, non. C'est pas portable. Tu fais l'hypothèse que les valeurs des caractères sont consécutives, ce qui dépend du charset utilisé. C'est pour ça qu'il existe des fonctions de conversion dans la bibliothèque standard du C.

  9. #9
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Bah, non. C'est pas portable. Tu fais l'hypothèse que les valeurs des caractères sont consécutives, ce qui dépend du charset utilisé. C'est pour ça qu'il existe des fonctions de conversion dans la bibliothèque standard du C.
    D'ailleurs ça me fait penser que si je veux convertir un caractère représentant un chiffre ('5' par exemple) en valeur numérique correspondante (5), je fais '5' - '0' (ce qui n'est évidemment pas non plus portable puisque je suppose que les caractères '0', '1', '2', '3', '4' et '5' sont consécutifs dans la table ascii). Mais j'ai pas trouvé de fonction "normalisée" pour faire l'équivalent. Quelqu'un aurait une piste ??? (mais s'il vous plaît, ne me parlez pas de "atoi()" ou "strtoul()" comme j'ai déjà vu dans ce fofo car ces fonctions prennent en entrée des chaînes et non des char)...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  10. #10
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    D'ailleurs ça me fait penser que si je veux convertir un caractère représentant un chiffre ('5' par exemple) en valeur numérique correspondante (5), je fais '5' - '0' (ce qui n'est évidemment pas non plus portable puisque je suppose que les caractères '0', '1', '2', '3', '4' et '5' sont consécutifs dans la table ascii). Mais j'ai pas trouvé de fonction "normalisée" pour faire l'équivalent. Quelqu'un aurait une piste ??? (mais s'il vous plaît, ne me parlez pas de "atoi()" ou "strtoul()" comme j'ai déjà vu dans ce fofo car ces fonctions prennent en entrée des chaînes et non des char)...
    Dans tous les chasets que je connais, y compris EBCDIC, les caractères '0' à '9' (contrairement à 'a' - 'z' et 'A' - 'Z') sont codés de façon contigüe. J'imagine que c'est portable.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  11. #11
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par Thierry Chappuis Voir le message
    Dans tous les chasets que je connais, y compris EBCDIC, les caractères '0' à '9' (contrairement à 'a' - 'z' et 'A' - 'Z') sont codés de façon contigüe. J'imagine que c'est portable.
    C'est meme exige par la norme du langage C.

  12. #12
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Thierry Chappuis Voir le message
    Dans tous les chasets que je connais, y compris EBCDIC, les caractères '0' à '9' (contrairement à 'a' - 'z' et 'A' - 'Z') sont codés de façon contigüe.
    Ce n'est pas le cas pour certains codes. Voir une belle collection de vieux codes: http://homepages.cwi.nl/~dik/english/codes/.

    Mais c'est plus pour l'anectode que pour autre chose. Ca n'a plus guere d'interet pratique. Et de toute facon, c'est exige par la norme C.

  13. #13
    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 Sve@r Voir le message
    D'ailleurs ça me fait penser que si je veux convertir un caractère représentant un chiffre ('5' par exemple) en valeur numérique correspondante (5), je fais '5' - '0' (ce qui n'est évidemment pas non plus portable puisque je suppose que les caractères '0', '1', '2', '3', '4' et '5' sont consécutifs dans la table ascii). Mais j'ai pas trouvé de fonction "normalisée" pour faire l'équivalent.
    Ben si, justement, c'est portable pour les chiffres décimaux (digits, ou caractères '0'-'9'), comme c'est exigé par la norme. C'est pour ça qu'il n'y a pas de fonction pour ça. L'abstraction est ici inutile.

    La bibliothèque standard du C n'est pas parfaite, mais elle donne quand même un certain nombre d'indications sur les Bonnes Pratiques...

  14. #14
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Ben si, justement, c'est portable pour les chiffres décimaux (digits, ou caractères '0'-'9'), comme c'est exigé par la norme.
    Chouette. Bon à savoir...

    Citation Envoyé par Emmanuel Delahaye Voir le message
    La bibliothèque standard du C n'est pas parfaite, mais elle donne quand même un certain nombre d'indications sur les Bonnes Pratiques...
    Hum... c'est un truc qu'il me faut absolument lire au plus vite...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  2. Réponses: 2
    Dernier message: 18/10/2003, 14h42
  3. Chaînes de caractères
    Par Zazeglu dans le forum C
    Réponses: 3
    Dernier message: 28/08/2003, 16h20
  4. Inverser une chaîne de caractères
    Par DBBB dans le forum Assembleur
    Réponses: 2
    Dernier message: 30/03/2003, 11h09
  5. Réponses: 3
    Dernier message: 09/05/2002, 01h39

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