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 :

Copier lettre par lettre


Sujet :

C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Octobre 2017
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Copier lettre par lettre
    Bonsoir tout l'monde ! J'imagine que mon problème est plutôt récurrent, j'ai juste pas trouvé les mots pour la recherche !
    je vais faire court :
    J'ai deux char* A et B;
    B="mot1 mot2"
    j'aimerais ne copier dans A que le mot 2
    J'ai bien essayé strcpy(A[i],B[i]) dans un while -> marche pas...
    j'ai essayé avec sprintf des fois que j'aie confondu... que néni

    Question : une idée ?
    Merci d'avance pour les réponses

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 451
    Points : 43 097
    Points
    43 097
    Par défaut
    strcpy copie la source dans la destination et va écraser ce qu'il y avait dans destination.

    C'est plutôt strcat qu'il te faut utiliser. (string concatenation)

    Il faut prendre en compte qu'en C, une chaine est en fait un tableau de char. Ce tableau a une taille exemple 10 caractères ci dessous :
    Utiliser *chaine signifie pointer sur le 1er élément du tableau, mais je pense que tu n'en ai pas encore aux pointeurs.

    Tu ne peux pas ajouter une chaine à la fin de ce tableau comme ça, le tableau de char/la chaine doit être suffisamment grand(e).

    De plus, les fonctions strcpy/strcat travaillent au niveau de la chaine complète, pas d'un ou plusieurs de ses éléments.
    Tu peux par exemple copier un caractère de A en écrasant un caractère de B exemple
    Ici la 2ème case du tableau de char A va correspondre à la 1ère case du tableau B (dans un tableau en C le 1er élément est l'élément 0, le second 1, etc.).

    Pour info : ceci est du C, pas du C++

    en C++, on utiliserait d'autres systèmes que les fonctions C strcat et cie.

    Il te faut : être sûr que ta chaine soit suffisamment grande pour contenir l'ajout que tu vas faire et si besoin agrandir celle-ci par exemple avec la fonction realloc, mais vu que tu débutes tu peux définir une chaine suffisamment grande dès le départ.

    Ensuite il va te falloir une autre fonction pour trouver la position de mot 2 dans ta chaine.
    Ensuite fait un man sur la fonction strsep ou strpbrk, tu auras d'autre fonctions en lien te permettant :
    - de retourner un pointeur sur une sous-chaine dans une chaine
    - trouver la position d'une chaine dans une autre
    - etc

    à toi de trouver la fonction qu'il te faut et de l'utiliser correctement.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Comment tu extraies mot2 de la chaîne ?
    Tu split sur l'espace ? Tu cherches mot2 ? Tu prends les 4 derneirs caractères ?
    Ensuite on verra pour le copier.
    Tu travailles vraiment avec des char* ? Tu fais vraiment du C++ ? std::string non ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Octobre 2017
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    sur mon programme complet (oui ça c'était de l'exemple bidon) j'ai initialisé la plupart de mes char en [255] histoire d'être sûr;
    A la base j'avais fait des char* pour pouvoir me déplacer a l'intérieur (je connais les pointeurs, je sors de BTS xD)

    Le A[i]=B[i] marchait pas hier... et maintnant si... j'adore quand les erreurs disparaissent sans raison.... Faut dire embarcadero j'ai l'impression que c'est pas hyper stable

    Mais alors du coup, strcat fonctionne en c++ si #include <string.h> ?

    "en C++, on utiliserait d'autres systèmes que les fonctions C strcat et cie."
    Quels genre de fonctions ? Un site du genre Devdoc.io pour me documenter sur ces autres méthodes ?

    Merci pour la réponse rapide, et pour les futures si jamais

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Octobre 2017
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Comment tu extraies mot2 de la chaîne ?
    Tu split sur l'espace ? Tu cherches mot2 ? Tu prends les 4 derneirs caractères ?
    Ensuite on verra pour le copier.
    Tu travailles vraiment avec des char* ? Tu fais vraiment du C++ ? std::string non ?
    Alors pour extraire mot2 j'ai pensé à :

    while (B[i]=!" ")
    -> dans A[i]

    donc oui je split sur l'espace

    while (B[i]=!"\n")
    -> dans C[i]

    ui je trvaille sur du C++ et oui je préfère les char array aux str

    en gros je veux couper en deux mon char pour qu'y reste d'un coté le premier mot, de l'autre le RESTE de la phrase, ça peut être un, deux ou quinze mots

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par momomm Voir le message
    ui je trvaille sur du C++ et oui je préfère les char array aux str
    C'est au mieux stupide...
    Tu fais du C. Y'a aucune honte à ça mais ne prétends pas faire du C++ dans ce cas.
    Utiliser un compilateur C++ pour écrire du C supporté par celui-ci n'en fait pas un code C++.

    std::string
    std::string::find
    std::find
    std::string::constructor
    Ton problème se résoud en... 3-4 lignes de C++ propres.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    En C++, pas super propre (l'analyseur visual studio indique "warning C26481: Don't use pointer arithmetic. Use span instead (bounds.1)."), on peut écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a = b.c_str() + b.rfind(' ') + 1;
    Si on transcode en écriture "C", ça demande 3 lignes et on obtient les 7 commentaires suivant :
    warning C26485: Expression 'a': No array to pointer decay (bounds.3)
    warning C26485: Expression 'b': No array to pointer decay (bounds.3).
    warning C26481: Don't use pointer arithmetic. Use span instead (bounds.1).
    warning C26481: Don't use pointer arithmetic. Use span instead (bounds.1).
    warning C26481: Don't use pointer arithmetic. Use span instead (bounds.1).
    warning C26485: Expression 'a': No array to pointer decay (bounds.3).
    warning C26429: Symbol 'ptr' is never tested for nullness, it can be marked as not_null (f.23)

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

Discussions similaires

  1. Copier caractère par caractère
    Par Abdelkaoui dans le forum Débuter
    Réponses: 4
    Dernier message: 05/11/2007, 11h50
  2. Copier/coller par automatisation photoshop ?
    Par isa150183 dans le forum Imagerie
    Réponses: 3
    Dernier message: 11/02/2007, 20h55
  3. Réponses: 62
    Dernier message: 05/07/2006, 13h48
  4. Réponses: 10
    Dernier message: 19/06/2006, 19h04
  5. Comment faire Copier/Coller par code VBA sur INTERNET...
    Par GESCOM2000 dans le forum Access
    Réponses: 5
    Dernier message: 02/01/2006, 13h19

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