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 :

fonction manipulant les chaines de caractères


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    langage c
    Inscrit en
    Janvier 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

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

    Informations forums :
    Inscription : Janvier 2014
    Messages : 14
    Par défaut fonction manipulant les chaines de caractères
    bonjour !

    j'ai des probleme sur les fonction de chainne de caractére j'ai fait l'exercice de TP suivant mais ne compile pas :

    1.Déclarer une chaine de caractère PHRASE sans déterminer sa taille et faire le suivant :

    a)Demander à l’utilisateur de saisir une chaine et l’affecte à PHRASE.

    b)Affiche la taille de la chaine que l’utilisateur a saisit.

    c)Déclarer une autre chaine constante CHAINE qui contient le mot suivant < Bonjour ! >, puis copier le contenu de cette chaine dans la première chaine PHRASE, et afficher les deux.

    d)Modifier (c) en copiant juste les 3 premiers caractères dans PHRASE, et afficher 2 chaines.

    e)Demander à l’utilisateur de saisir un nom, puis affecter le à PHRASE, et afficher la concaténation de CHAINE et PHRASE.

    f)Comparer CHAINE et PHRASE à l’aide de la fonction de comparaison.
    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
    #include "stdafx.h"
    #include "string.h"
    #include "stdlib.h"
    int _tmain()
    {  
       char nom[20];
       char phrase[]="";
       char CHAINE[]="Bonjour!";
       printf("saisie vote chaine:\n" ); 
       scanf("%s",&chaine);
       phrase="chaine";
       printf("La longueur de %s est : %d",phrase,strlen(phrase));
       strcpy(t1,chaine2);
       strncpy(t1,chaine2,3);
       strncat(t1,chaine2,3);
       printf("saisir un mon :");
       scanf("%s",&nom);
     
       strcmp(phrase,chaine2);
    	getchar();
    }
    merci de m'indiquer l'erreur

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations forums :
    Inscription : Juillet 2012
    Messages : 200
    Par défaut
    Salut! Plusieurs remarques.
    1 : au lieu d'utiliser des tableaux de chaines, utilise des pointeurs auxquels tu alloueras de l'espace avant de lire les données de l'utilisateur.
    2 : ensuite quand tu fais
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char phrase[]="";
    tu dis au compilateur d'allouer pour phrase l'espace nécessaire pour la chaîne "" (qui est vide); de plus tu ne pourras plus modifier la chaîne sur laquelle pointe phrase.
    3 : pour finir, définis une taille maximale pour les chaînes à manipuler. Généralement, c'est 80, pour un terminal standard.

  3. #3
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Quelques remarques :
    1-
    1.Déclarer une chaine de caractère PHRASE sans déterminer sa taille et faire le suivant :
    Dit comme cela, ce n'est pas possible : une chaine de caractères est un tableau et un tableau doit avoir une taille (nombre d'éléments) au moment de sa création.
    Ce que cela veut dire dans l'esprit de celui qui a posé l'exercice, mystère.

    2- char phrase[]="";.
    Comme le dit esired cela alloue de la place pour une chaine vide (donc uniquement pour le '\0' terminal) donc le tableau phrase ne comporte qu'un char. (Ce tableau est modifiable contrairement à ce que dit esired)

    3-char CHAINE[]="Bonjour!";.
    CHAINE n'est pas un tableau constant comme le demande l'énoncé. On doit avoir const char CHAINE[]="Bonjour!"; ou on peut envisager const char * CHAINE="Bonjour!";.
    Dans ce dernier cas, CHAINE n'est pas une chaine de caractères (ce n'est pas un tableau) mais un pointeur qui contient l'adresse d'un tableau constant contenant la chaine spécifiée.

    4- scanf("%s",&chaine);.
    Il s'agit sans doute de CHAINE et non pas chaine : il faut distinguer les majuscules des minuscules
    Le & est une erreur (sans incidence pratique ici). Certes, on doit spécifier l'adresse de destination dans un scanf. Mais l'identificateur d'un tableau représente l'adresse du début du tableau sauf lorsqu'il est opérande des opérateurs unaires & (adresse de) et sizeof. On attend alors scanf("%s",CHAINE);.

    5- phrase="chaine";est incorrect : on ne copie pas un tableau avec l'opérateur = . Ici "chaine" est un tableau donc dans ce contexte (hors & et sizeof) sera évalué comme l'adresse du début du tableau. Pour ranger une adresse, il faut un pointeur, mais phrase n'est pas un pointeur mais un tableau

    6-strcpy(t1,chaine2);t1 non défini, chaine2 non défini

    7- strncpy(t1,chaine2,3);Attention, strncpy() ne met pas systématiquement un '\0' terminal dans la chaine de destination

    8- scanf("%s",&nom); Voir la remarque 4 plus haut

    9- strcmp(phrase,chaine2);Et que fait-on du résultat de la fonction ?

  4. #4
    Membre averti
    Homme Profil pro
    langage c
    Inscrit en
    Janvier 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

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

    Informations forums :
    Inscription : Janvier 2014
    Messages : 14
    Par défaut
    Merci

    J'ai compris tout ce que tu dis. Mais question Demander à l’utilisateur de saisir une chaine et l’affecter à PHRASE.
    Comment je dois l'affecter ?
    Et merci ^^.

  5. #5
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Le problème pour répondre à ta question est d'interpréter ce qu'a voulu dire celui qui a posé la question mentionnée en (1).

    Le plus simple et le plus immédiat est de déclarer un tableau PHRASE suffisamment grand et d'effectuer directement la lecture dedans.

    Une autre possibilité est de passer par un tableau auxiliaire, suffisamment grand, d'effectuer la lecture dedans puis de créer un tableau PHRASE de la bonne taille et de recopier la chaine dedans. La création du tableau PHRASE de la bonne taille peut être faite par un VLA (en C99) ou par allocation dynamique (malloc())

  6. #6
    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 chakirlbr Voir le message
    f)Comparer CHAINE et PHRASE à l’aide de la fonction de comparaison.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int _tmain()
    {  
       ...
       strcmp(phrase,chaine2);
       ...
    }
    Bonjour
    Bien que ce ne soit pas explicité, je pense que le demandeur attend que tu compares les contenus mais aussi que tu affiches quelque-part le résultat de cette comparaison...

    Citation Envoyé par chakirlbr Voir le message
    merci de m'indiquer l'erreur
    Ben justement c'est qu'il n'y en n'a pas qu'une !!!
    Ce qui m'amène à te dire que je pense que tu aurais avantage à faire les exos un à un, et à ne passer au suivant que lorsque le précédent fonctionne (quitte à compléter ton prog au fur et à mesure...)

    Citation Envoyé par esired Voir le message
    1 : au lieu d'utiliser des tableaux de chaines, utilise des pointeurs auxquels tu alloueras de l'espace avant de lire les données de
    Vu le niveau du TP (apprentisage des chaines et de leurs manipulations), je ne pense pas qu'il ait vu les notions nécessaires à la manipulation de pointeurs et de malloc()...
    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. [XL-2010] Les opérateurs de manipulation de chaines de caractères ne fonctionnent pas
    Par jpclabaux dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 31/07/2013, 19h22
  2. fonctions sur les chaines de caractères
    Par mido1951 dans le forum C
    Réponses: 16
    Dernier message: 06/06/2013, 00h36
  3. manipuler les chaines de caractères en scripte python
    Par Djawida dans le forum Général Python
    Réponses: 1
    Dernier message: 04/03/2010, 20h33
  4. Mettre les paramètres d'une fonction js en chaine de caractères
    Par bouzakher dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 25/08/2009, 15h31
  5. Pb avec les fonctions sur les chaines de caractères.
    Par arnold95 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/04/2008, 19h09

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