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 :

Comparaison de chaînes de caractères


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 12
    Points : 7
    Points
    7
    Par défaut Comparaison de chaînes de caractères
    Salut !

    Je souhaite écrire une fonction compareStrings comparant deux chaînes de caractères. Cette fonction retournera -1 si la première chaîne est avant la seconde dans l'ordre lexicographique, 1 si elle est après, et 0 si elles sont égales.

    J'ai plusieurs questions :

    1) Quel type représente un caractère en C ?
    2) Comment est representée une chaîne de caractères en C ?
    3) Par quelle valeur se termine une chaîne de caractères ?
    4) Quel est le prototype de la fonction demandée ?
    5) Ecrire la fonction.

    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bien le bonjour,

    Je pense que ceci : http://nicolasj.developpez.com/articles/libc/string/ est ce qui répond complètement à tes interrogations.
    ( concernant le prototype, voir strcmp )

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 622
    Points
    23 622
    Par défaut
    Bonjour et bienvenue,

    Comme précisé dans tes deux autres discussions, nous pouvons t'aider mais nous ne ferons pas ton travail à ta place. Montre-nous ce que tu as écrit jusqu'ici (avec les balises [code]) et où tu bloques en particulier. Nous tâcherons alors de t'aider.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 11
    Points : 13
    Points
    13
    Par défaut
    Bonsoir.
    Une fonction est un programme ou sous programme qui renvoie une valeur. Elle évite la répétition du code dans le programme.
    Pour résoudre ton problème de départ, tu peux te déclarer une fonction de type int qui se chargera en fonction des comparaisons, de renvoyer une valeur spécifique.

  5. #5
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    effectivement classiquement on utilise str(n?)cmp pour comparer deux chaines, mais à voir la tournure des questions posées y compris sur les autres threads que tu as créé j'imagine qu'il s'agit d'un exercice, et que ce qu'attend le prof ici c'est que tu écrives toi même la fonction, pas que tu utilises celle qui est déjà faite dans la libc

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 622
    Points
    23 622
    Par défaut
    Re-bonsoir,

    Citation Envoyé par mrcode Voir le message
    ok je n'ai pas besoin de crée la fonction mais comment intégré la fonction a mon programme ? De plus je ne vois pas la difference entre un sous programme et une fonction
    Je ne vois pas à quel endroit on a parlé de « sous-programme » mais peu importe :

    • Un sous-programme est un programme qui est appelé par un autre, qui effectue sa tâche, se termine en renvoyant un résultat éventuel et rend la main au programme qui l'a appelé, qui poursuit alors là où il en était en passant à l'instruction suivante ;
    • Une fonction est une expression mathématique dont la valeur est fonction d'un paramètre d'entrée.


    En C, donc, les notions de sous-programme et de fonction sont effectivement confondues, d'une part parce que le langage C permet d'associer un bloc de code entier à une fonction pour en faire le calcul et, d'autre part, parce le C ne fait pas le distingo entre commande et fonction. Cependant, ce n'est pas le cas de tous les langages : le vénérable BASIC de 1968 qui a connu son âge d'or dans les années 1980, par exemple, proposait « GOSUB » pour sauter à un numéro de ligne en préservant l'adresse de retour, retrouvée ensuite par « RETURN ». Les versions de BASIC suffisamment évoluées proposaient en parallèle DEF FN qui permettait de définir jusqu'à dix fonctions évaluables dans des expressions mathématiques, mais elles-mêmes ne pouvaient être définies que par ces mêmes expressions (comme en algèbre quand on les pose sur papier). Enfin : il y avait une différence claire entre instruction, commande et fonction : taper « CLS » effaçait l'écran sans aucun récrimination car il s'agissait bien d'un ordre. En revanche, écrire par exemple « COS(0) » seul sur une ligne, en l'absence d'affectation ou d'autres calculs, était considéré comme une erreur de syntaxe.

    Tout cela pour dire qu'en C, tout commence plus ou moins par une fonction : le point d'entrée de ton programme est lui-même une fonction, qui se nomme toujours « main » (imposé par le langage), et qui reçoit des paramètres, fait un traitement et renvoie à la fin un int vers l'entité qui l'a appelé. Ta fonction main() peut soit tout faire elle-même, soit s'appuyer sur d'autres fonctions. Et celles-ci peuvent être soit des fonctions déjà existantes, proposées par la norme du langage ou par des bibliothèques tierces, soit définies par toi.

    Ceci nous amène à ta première question : pour ajouter une fonction au langage C, il suffit de l'écrire : dès lors qu'elle a été définie et que le compilateur l'a rencontrée, son nom est ajouté au lexique de celui-ci et elle fait alors partie du langage à part entière. Seul détail : il faut en principe que le compilateur ait bien rencontré ta fonction pour pouvoir y faire référence ensuite. Ceci veut dire qu'il faut soit l'écrire (ou l'insérer) avant ton programme principal, soit utiliser un « prototype de fonction ».

    Tu peux donc écrire ceci :

    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
    #include <stdio.h>
     
    int AdditionDeDeuxEntiers (int a, int b)
    {
        return a + b;
    }
     
    int main (void)
    {
        int a,b,c;
     
        a = 5;
        b = 7;
        c = AdditionDeDeuxEntiers(a,b);
     
        printf ("a vaut %d ; b vaut %d ; la somme des deux vaut %d\n",a,b,c);
     
        return 0;
    }
    Le fait d'avoir défini une nouvelle fonction nommée « AdditionDeDeuxEntiers » te permet de l'utiliser tout-à-fait normalement, par la suite, dans le reste de ton programme.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 12
    Points : 7
    Points
    7
    Par défaut Fini
    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
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
     
    int comparestring(char *p1, char *p2)
    //Q1: le type qui represente un caractere en c est char
    //Q2:
    //Q3: Un chaine de caractere se termine par \0
    //Q4:
    //Q5:
     
    int main(){
     
        char mot1[]="melou",mot2[]="melou";
     
        printf("comp=%d\n",comparestring(mot1,mot2));
     
        return 0;
    }
    Voici mon code cependant je n'arrive pas a trouver la réponse a la question 2) Comment est representée une chaîne de caractères en C ?
    ainsi qu'a la question 4) Quel est le prototype de la fonction demandée ?

  8. #8
    Invité
    Invité(e)
    Par défaut
    As-tu réellement fait toi-même cette fonction ?

    Si c'est le cas, les réponses de la questions deux et quatre devraient te sauter aux yeux.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Pour le prototype , oui c'est bon.
    Cependant je ne vois pas ce qui est demander par " comment est représenter une chaine de caractère "

    Ma reponse logique serait de dire qu'une chaine de caractère est representé comme un tableau à une dimension de caractères
    mais je ne sais pas si c'est la réponse que l'on attend de moi

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bravo, tu as trouvé !

    Le C est simple et logique : Une chaîne de caractère est une suite de caractère que l'ont met les uns à la suites des autres, donc un tableau à une dimension de char. La subtilité est que ce tableau de char doit impérativement se terminé par le caractère \0. Toutes les fonctions de la bibliothèque standard du C manipuler des "chaînes de caractères" sont en fait à la recherche de ce caractères spécifique. C'est celui-ci qui indique que "la chaîne est finie.".

    Le prototype d'une fonction est ce que l'on appelle aussi sa signature. Elle doit définir le type de retour, le nom ainsi que les paramètres de ta fonction.

    Dans ton cas, int comparestring(char *p1, char *p2) est donc le prototype de ta fonction.
    Int est sa valeur de retour, comparestring et (char *p1, char *p2) sont les paramètres de ta fonction.
    -

Discussions similaires

  1. Comparaison de chaînes de caractères
    Par bam14 dans le forum Cobol
    Réponses: 3
    Dernier message: 27/08/2007, 10h13
  2. comparaison de chaînes de caractères
    Par Jasmine80 dans le forum Langage
    Réponses: 17
    Dernier message: 27/07/2007, 09h47
  3. Réponses: 3
    Dernier message: 16/05/2007, 14h41
  4. [MySQL] Problème de comparaison de chaîne de caractères
    Par Laurent64 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 15/05/2007, 19h04
  5. [Excel-VBA] Pb de comparaison de chaîne de caractères
    Par tangjuncn dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/02/2007, 12h50

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