retourner une chaîne de caractère [C]
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

retourner une chaîne de caractère [C]



  1. #1
    theophrastusbombastus

    retourner une chaîne de caractère [C]


    ------

    Bonjour,
    juste une petite question sur la programmation en C, est il possible d’implémenter une fonction qui retourne une chaîne de caractères ?
    Par exemple avec ce programme :
    Code:
    #include <stdio.h>
    
    int lon(char* str) {
        int i=1;
        while (str[i] != 0) {
            i++;
        }
    return i;
    }
    
    char inv(char* str) {
        int i=0; char inv[32];
        for (i=0 ; i<lon(str) ; i++) {
            inv[i]=str[lon(str)-1-i];
        }
    return inv;
    }
    
    main () {
        char str[32], inv[32]; int i=0;
        printf("entrer un mot :\n");
        scanf("%s", str);
        inv=inv(str);
        printf("l'inverse de %s est %s", str, inv);
    return 0;
    }
    Oui je précise c'est "n'importe quoi" ! MAIS dans l'idée de cette partie :
    Code:
    char inv(char* str) {
        int i=0; char inv[32];
        for (i=0 ; i<lon(str) ; i++) {
            inv[i]=str[lon(str)-1-i];
        }
    return inv;
    }
    est il possible de la modifier pour qu'elle me renvoie ma chaîne de caractères "inversée" du coup ?

    En espérant avoir réussi a me faire comprendre je vous remercie d'avance pour vos réponses !

    -----

  2. #2
    Paraboloide_Hyperbolique

    Re : retourner une chaîne de caractère [C]

    Bonsoir,

    Cela peut se faire de plusieurs manières plus ou moins simples ou compliquées. Ici, je vous recommanderais plutôt d'utiliser une fonction 'inv' de signature suivante:

    Code:
    void inv(const char* str, char *str_inv)
    où 'str' est l'adresse de la chaîne initiale et 'str_inv' est l'adresse de la chaine inversée.

  3. #3
    polo974

    Re : retourner une chaîne de caractère [C]

    le problème étant toujours de savoir qui alloue la mémoire contenant le résultat.

    et pour éviter la fuite de mémoire, qui va libérer cette même mémoire.

    ne pas oublier qu'un pointeur n'est qu'une variable assimilable à une panneau indiquant une direction, mais ça peut être une fausse direction...
    Jusqu'ici tout va bien...

  4. #4
    pm42

    Re : retourner une chaîne de caractère [C]

    Il faudrait aussi ne pas retourner un char mais un char*, surtout ne pas retourner quelque chose qui est sur la pile (variable locale), ne pas limiter la taille à 32 (cf. les remarques ci-dessus), corriger la fonction lon qui est fausse puisqu'elle ne renvoie jamais 0 et fait doublon de strlen...

    A noter que taper le programme donné, essayer de le compiler et le faire tourner serait aussi éducatif.

  5. A voir en vidéo sur Futura
  6. #5
    theophrastusbombastus

    Re : retourner une chaîne de caractère [C]

    Avant tout merci a tous pour vos réponses !

    Bon du coup j'ai utilisé l'idée de Paraboloide_Hyperbolique et ca marche nickel :

    Code:
    #include <stdio.h>
    
    int lon(char* str) {
        int i=1;
        while (str[i] != 0) {
            i++;
        }
    return i;
    }
    
    void tra(char* str, char* inv) {
        int i=0;
        for (i=0 ; i<lon(str) ; i++) {
            inv[i]=str[lon(str)-1-i];
        }
    }
    
    main () {
        char str[32], inv[32]; int i=0;
        printf("entrer un mot :\n");
        scanf("%s", str);
        tra(str, inv);
        printf("l'inverse de %s est %s\n", str, inv);
    return 0;
    }
    enfin ça marche... du moment que je lui met pas de truc tordu ! Je n'ai pas tout compris des explications techniques qui ont suivi mais merci d'avoir pris de votre temps pour m'aider !

  7. #6
    inviteb9f49292

    Re : retourner une chaîne de caractère [C]

    quelques remarques:
    - ta fonction "lon" ne gère toujours pas la chaîne de caractère vide, et ça existe déjà en standard avec "strlen" or lorsqu'on développe on ne réinvente jamais la roue, c'est un peu pour ne pas travailler pour rien, et beaucoup pour bénéficier des corrections dues aux corrections apportée après des milliers d'années d'utilisations dans des cas très différent.
    - ta fonction "tra" recalcule à chaque itération la longueur de la chaîne, c'est couillon utilises une variable à la place.
    - nous ne sommes plus dans les années 80 où la mémoire était tellement limité qu'il fallait utiliser des identifiants les plus courts possibles, aujourd'hui le but d'un bon développeur et de faciliter la (re)lecture du code par un humain, donc utilises des noms de fonctions et de variables explicites: "longueur_chaine" c'est plus parlant que "lon" non ?

  8. #7
    theophrastusbombastus

    Re : retourner une chaîne de caractère [C]

    du coups ces "quelques remarques" m’intéresse bien... Je me sens, de fait, obligé de replacer le contexte. C'est un exercice de TD (pour la fac) d'initiation au langage C, je n'ai aucunes connaissances dans ce langage, on fait plus de l'algorithmie que de la programmation. Je dois donc "réinventer" la roue... d'où ma nouvelle question, comment puis gérer les chaines de caractères vides ?
    Je prend note pour l’itération ce sera modifié ainsi que pour le nom des fonctions et des variables, merci des conseilles !

  9. #8
    invite895675d5

    Re : retourner une chaîne de caractère [C]

    Et pour voir les erreurs dans ta fonction lon : que se passe-t-il se tu as une chaine d'une seul caractère ou vide ?

  10. #9
    inviteb9f49292

    Re : retourner une chaîne de caractère [C]

    Je dois donc "réinventer" la roue... d'où ma nouvelle question, comment puis gérer les chaines de caractères vides ?
    L'exercice est en effet le seul cas où il est autorisé de réinventer la roue...
    Pour gérer les chaînes de caractère vide, c'est très simple, c'est juste un problème d'indice de tableau, il faut se rappeler qu'en C les indices commence à 0 et pas à 1.

Discussions similaires

  1. [C] chaine de caractère.
    Par invite38d9e885 dans le forum Programmation et langages, Algorithmique
    Réponses: 3
    Dernier message: 26/12/2015, 12h05
  2. [C] Concaténer chaine de caractère + caractère
    Par invite48ca7510 dans le forum Programmation et langages, Algorithmique
    Réponses: 17
    Dernier message: 26/01/2013, 12h43
  3. chaîne de caractère
    Par invite9c4bf030 dans le forum Programmation et langages, Algorithmique
    Réponses: 6
    Dernier message: 02/04/2012, 20h30
  4. chaîne de caractère
    Par invite9f95f6e7 dans le forum Programmation et langages, Algorithmique
    Réponses: 15
    Dernier message: 01/01/2012, 16h06
  5. Chaine de caractère C++
    Par invitee5fedd72 dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 06/03/2008, 21h29