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 :

Echange de valeurs entre deux Strings


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mai 2015
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mai 2015
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Echange de valeurs entre deux Strings
    Bonjour à tous !

    Je début en C, en autodidacte, mais je souvent confronté à des soucis que je tente de régler.
    Aujourd'hui, il y en a un pour lequel je ne trouve pas de solution, et je pense que j'aurais besoin de quelques explications !

    L'exercice que j'ai demande de refaire la fonction atoi. Pour cela, après avoir compter le nombre de caractères de la chaine, je veux échanger, si la valeur est correcte (donc un chiffre, ou un moins au tout début) l'afficher dans une autre chaine de caractère.
    J'avais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (*str + lenght >= 48 && *str + lenght <= 57)
    *second_str + second_lenght = *str + lenght;
    mais j'ai une erreur qui me dit
    error: expression is not assignable
    *second_str + second_lenght = *str + lenght;
    Je débute et ce que je fais est peut être totalement ridicule mais ... Voilà ^^
    Du coup : Comment puis-je faire pour que "12AZ" dans *str soit basculé en "12" dans *str_second ?

    Merci de votre aide !

  2. #2
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 610
    Points : 1 878
    Points
    1 878
    Billets dans le blog
    21
    Par défaut
    *second_str + second_lenght = *str + lenght;
    Mettons que *second_str == 48 et second_length = 2, cela équivaut à écrire:
    Tu comprends pourquoi il y a un problème d'assignation, non?

    Tu pourrais écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     *(second_str + second_length) = *(str + length)
    Cela étant, je te confirme que ton implémentation de atoi a l'air un peu portnawak...

    L'esprit général de ce genre de fonction est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int resultat = 0;
    tant que *str est un chiffre
      resultat *= 10
      resultat += *str - '0'
      str++;
    retourne resultat

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 668
    Points : 10 673
    Points
    10 673
    Par défaut
    En anglais c'est length avec un th

    Citation Envoyé par stendhal666 Voir le message
    L'esprit général de ce genre de fonction est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int resultat = 0;
    tant que *str est un chiffre
      resultat *= 10
      resultat += *str - '0'
      str++;
    retourne resultat
    Pas d'accord
    • Ce n'est pas un atoi mais une recopie "Comment puis-je faire pour que "12AZ" dans *str soit basculé en "12" dans *str_second?"
    • Il faut allouer le résultat (ou str_second). Par conséquent, il faut compter, dans un premier temps, le nombre de chiffres consécutifs pour, dans un deuxième temps, allouer correctement et ensuite faire la recopie.
    • Il ne faut pas travailler directement avec la source (str dans ton exemple)

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    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 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par foetus Voir le message
    • Il faut allouer le résultat (ou str_second). Par conséquent, il faut compter, dans un premier temps, le nombre de chiffres consécutifs pour, dans un deuxième temps, allouer correctement et ensuite faire la recopie.
    Eventuellement, puisqu'on est sûr que "12" rentrera (fatalement !!!) dans "12AZ" on peut alors allouer directement la taille de "12AZ". Certes ça gaspillera parfois un peu de place mais ça évite une première recherche parfois inutile. L'un dans l'autre...

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 668
    Points : 10 673
    Points
    10 673
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    ça évite une première recherche parfois inutile. L'un dans l'autre...
    Oui mais avec le nombre de caractères connu, on peut directement utiliser strncpy ou memcpy

  6. #6
    Membre expérimenté Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 655
    Points : 1 678
    Points
    1 678
    Par défaut
    Hello,

    Une autre idée: pourquoi ne pas parcourir la chaine tant que l'on a un chiffre, ensuite, lorsque on est sur la caractère 'fautif' (même le \0), le copier dans un char, mettre \0 dans cette position, convertir, et remettre le caractère fautif à sa place, plutot que jouer avec une copie ?

    A+

    Edgar;

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    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 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par edgarjacobs Voir le message
    ...ensuite, lorsque on est sur la caractère 'fautif' (même le \0), le copier dans un char, mettre \0 dans cette position, convertir, et remettre le caractère fautif à sa place...
    Ben pas obligé. La fonction qui se charge de la conversion pourra elle-même détecter et s'arrêter sur le caractère 'fautif'. Inutile alors de le remplacer par un '\0' préalable...

Discussions similaires

  1. Echanger les valeurs entre deux select
    Par otmaneo01 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 22/03/2015, 11h13
  2. Echange de valeurs entre deux fenêtres en C#-WPF
    Par Invité dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 07/01/2014, 02h13
  3. [PHP-JS] echange de valeur entre le javasript et le php
    Par cortex007 dans le forum Langage
    Réponses: 7
    Dernier message: 20/01/2006, 19h32
  4. [TP] Echanger des données entre deux programmes
    Par ILIAS Raphaël dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 22/03/2005, 09h31
  5. [.NET VC++] ou exclusif entre deux String
    Par benoitB dans le forum MFC
    Réponses: 7
    Dernier message: 25/11/2003, 11h20

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