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 :

[Débutant] fonction qui renvoi plusieurs chaines ???


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 59
    Points : 38
    Points
    38
    Par défaut [Débutant] fonction qui renvoi plusieurs chaines ???
    salut à tous

    je viens de débuter en C++ et je n'arrive pas à faire une fonction qui renvoir un tableau de char*(enfin plusieurs char*), je sais qu'il faut utiliser des pointeurs mais je ne métrise pas encore assez bien cette notion.
    Donc si quelqu'un pouvait corriger mon code afin que la fonction renvoi plusieur char* (au lieu de les afficher) et que ce soit la fonction Main qui les affiche, ca serait gentil ... ou juste une explication de comment faire ca m'ira tres bien aussi

    Merci

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    include "stdafx.h"
    #include "iostream.h"
    #include "string.h"
     
    char* chaine;
    void palindrome();
     
    int main(int argc, char* argv[])
    {
     
    int tailleChaine;
    bool palin=true;
     
     
    	cout<<"Veuillez entrer la chaine \205 tester SVP: "<<endl;
    	cin>>chaine;
     
    	cout<<endl<<endl;
     
    	palindrome(); //appel de fonction
     
    	cout<<endl<<endl;
    	getchar();
    	return 0;
    }
     
     
     
    void palindrome()
    {
     
    int tailleChaine,debut,fin;
    bool palin=true;
    tailleChaine=strlen(chaine);
     
    	for (int i=0;i<tailleChaine;i++)
    	{
    		for (int j=i+2;j<tailleChaine;j++)
    		{
    			if (chaine[i]==chaine[j])
    			{
    				debut=i+1;
    				fin=j-1;
     
    				palin=true;
    				while(debut<=fin && palin==true)
    				{
    					if (chaine[debut]==chaine[fin])
    					{
    						fin=fin-1;
    						debut=debut+1;
    					}
    					else
    						palin=false;				
     
    				}
     
    			}
    			else	
    				palin=false;
     
    			if(palin==true)
    			{
    				for (int k=i;k<=j;k++)
    					cout<<chaine[k]; //ici j'aimerais stocker au lieu d'afficher
     
    				cout<<endl;	
    				break;
    			}
     
    		}
     
     
    	}
    }

  2. #2
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Deja char* et string ce n'est pas la meme chose, choisi bien tes termes quand tu demande de l'aide.

    De deux les variables globales c'est pas bien...

    Ensuite pour ton hisoire de tableau de char*

    Tu peux faire comme cela
    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    void test(char** tab) {
       tab[0]=malloc(50);
       tab[50]=malloc(50);
       sprintf(tab[0],"salut");
       sprintf(tab[49],"euh");
    }
     
    int main(void) {
        char *tab[50];
        test(tab);
        printf("%s\n",tab[0]);
        printf("%s\n",tab[49]);
        return 0;
    }
    (Ne pas oublier les free qui vont bien)

    Meme pas besoin de return, tu passe ton tableau en parametre et c'est tout

    C'est sur la c'est plus du C que du C++.
    Sinon a la place tu peux creer un vector de string et passe ce vector en reference à une fonction

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 590
    Points
    41 590
    Par défaut
    Erreur: débordement de tableau (peut-être même signalé dès la compilation)

  4. #4
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par Médinoc
    Erreur: débordement de tableau (peut-être même signalé dès la compilation)
    Exact, oups...
    J'edite

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 59
    Points : 38
    Points
    38
    Par défaut
    merci pour ta réponse Skyrunner.

    mais je n'ai pas tout compris...

    1.tab[0]=malloc(50);-->cette fait quoi? aloue un espace pour 49 caracteres?

    2. dans la fonction main tu affiche tout le tab mais ce n'est pas dit qu'il soit rempli entierement alors comment savoir? car si je rempli jusque Tab[10] ca ne sert a rien d'afficher jusque tab[50].

    Merci de m'éclairer

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 590
    Points
    41 590
    Par défaut
    1.tab[0]=malloc(50);-->cette fait quoi? aloue un espace pour 49 caracteres?
    ça alloue un espace pour 50 caractères, de 0 à 49

  7. #7
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par djoao
    on main tu affiche tout le tab mais ce n'est pas dit qu'il soit rempli entierement alors comment savoir? car si je rempli jusque Tab[10] ca ne sert a rien d'afficher jusque tab[50].
    Non j'ai juste afficher le premiere case et la derniere du tableau (les 2 cases ou j'ai mis quelque chose en fait)

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 59
    Points : 38
    Points
    38
    Par défaut
    Mais comment savoir que ces 2 cases là sont replies et pas les autres?

    merci

  9. #9
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par djoao
    Mais comment savoir que ces 2 cases là sont replies et pas les autres?

    merci
    Ben la je le sais parce que c'est moi qui les ait rempli dans la fonction test

  10. #10
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut
    Il faut boucler et tester leur valeur, on sauras ainsi si tel ou tel case contien quelque chose ou non. C'est la seul solution a ma conaissence.

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 59
    Points : 38
    Points
    38
    Par défaut
    merci pour vos réponses!

    mais le compilateur m'affiche une erreur pour ces 2 lignes:

    tab[0]=malloc(50);
    tab[50]=malloc(50);

    error C2440: '=' : cannot convert from 'void *' to 'char *'


    que faire ?

    merci

  12. #12
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 139
    Points : 55
    Points
    55
    Par défaut
    Essai de mettre char test à la place de void test...

  13. #13
    jmv
    jmv est déconnecté
    Membre confirmé Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Points : 603
    Points
    603
    Par défaut
    et la STL alors ???

    Sauf si le but de tout ceci est de faire un exercice sur les pointeurs, pour faire une fonction qui renvoie un tableau de chaines de caracteres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <string>
    #include <vector>
    using namespace std;
     
    vector<string> uneFonction()
    {
       //...
    }

  14. #14
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 282
    Points : 11 036
    Points
    11 036
    Par défaut
    Citation Envoyé par jmv
    et la STL alors ???
    +1
    C'est un débutant, il a autre chose à faire que du perdre du temps avec les pointeurs au début de son long chemin d'apprentissage.

  15. #15
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 139
    Points : 55
    Points
    55
    Par défaut
    Les pointeurs, c'est pas ce qu'il y a de plus difficile en c++...

    La STL, je ne sais toujours pas ce que c'est, et je sais ce que sont les pointeurs.

  16. #16
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 282
    Points : 11 036
    Points
    11 036
    Par défaut
    Parce que l'on t'a appris le C++ selon l'approche historique au lieu de l'approche qui pourrait te rendre fonctionnel plus rapidement.

    Diverses explications sur la bibliothèque standard dans la FAQ. Dont des mini programmes qui permmettent de voir rapidement comment elle s'utilise.

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 59
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par insomniak
    Essai de mettre char test à la place de void test...
    ca ne change rien

    -->jmv : je ne sais pas ce qu'est la STL et j'ai pas compris l'exemple que tu a mis

    personne sait comment corriger ces 2 lignes? car si je les enleve le programme plante .

    encore merci pour votre aide

  18. #18
    jmv
    jmv est déconnecté
    Membre confirmé Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Points : 603
    Points
    603
    Par défaut
    Comme on te l'as sugérré, il y a des exemples dans la FAQ.
    As-tu un bouquin de c++, si oui, lit tout de suite le chapitre sur la STL (stream, string, conteneurs) qui malheureusement se trouve bien souvent à la fin des livres, si non, va vite en acheter un (ha zut, on est dimanche)

  19. #19
    jmv
    jmv est déconnecté
    Membre confirmé Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Points : 603
    Points
    603
    Par défaut
    si je reprend ton code initiale, et en y mettant de la STL (en modifiant le mininmu) :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    vector<string> palindrome() // <-- MODIF ICI
    { 
        vector<string> retour;  // <-- MODIF ICI
     
    int tailleChaine,debut,fin; 
    bool palin=true; 
    tailleChaine=strlen(chaine); 
     
       for (int i=0;i<tailleChaine;i++) 
       { 
          for (int j=i+2;j<tailleChaine;j++) 
          { 
             if (chaine[i]==chaine[j]) 
             { 
                debut=i+1; 
                fin=j-1; 
     
                palin=true; 
                while(debut<=fin && palin==true) 
                { 
                   if (chaine[debut]==chaine[fin]) 
                   { 
                      fin=fin-1; 
                      debut=debut+1; 
                   } 
                   else 
                      palin=false;             
     
                } 
     
             } 
             else    
                palin=false; 
     
             if(palin==true) 
             { 
                   string str(chaine+i, chaine+j+1);  // <-- MODIF ICI
                   retour.push_back(str);
     
     
                break; 
             } 
     
          } 
     
     
       } 
       return retour;
    }
    (code non testé)

  20. #20
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 282
    Points : 11 036
    Points
    11 036
    Par défaut
    Code non testé...
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    #include <iostream>
    #include <string>
    #include <limits> // pour la pause 
    #include <algorithm> // for_each
    #include <iterator> // ostream_iterator
     
    bool estPalindrome(std::string const&);
    void remplitSiPalindrome(std::string const&, std::vector<std::string>&);
     
    int main(int argc, char* argv[])
    {
        std::vector<std::string> palindromes;
        std::string chaine;
     
        while(
           std::cout<<"\nVeuillez entrer la chaine à tester SVP:\n-> ",
           std::cin>>chaine)
       {
           if (chaine.empty()) break;
           remplitSiPalimdrome(chaine, palindromes);
       }
       cout<< "\n\nLes palimdromes sont:\n";
    #if 1
       std::for_each(palindromes.begin(), palindrome.end(),
           std::ostream_iterator<std::string>(std::cout, "\n"));
    #else   // globalement equivalent à
       for (
            std::vector<std::string>::const_iterator 
                b = palindromes.begin(),
                e = palindrome.end()
            ; b!=e
            ; ++b
       )
       {
           std::cout << *b << \n;
       }
    #endf
     
       std::cin.ignore(std::numeric_limit<int>::max());
       return 0;
    }
     
    bool estPalindrome(std::string const& chaine)
    {
        const size_t tailleChaine = chaine.length();
     
        for (size_t i=0;i<tailleChaine/2; ++i)
        {
            if (chaine[i] != chaine[tailleChaine-i])
                return false;
        }
        return true;
    }
     
    void remplitSiPalindrome(
        std::string const& chaine, std::vector<std::string>& v)
    {
        if (estPalimdrome(chaine))
            v.push_back(chaine);
    }
    En séparant comme il se doit traitements et interactions avec l'utilisateur, pas besoin de retourner plusieurs chaines à fois.

    EDIT: à moins que cela soit dû à ton algo pour le moins compliqué...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Une fonction qui renvoie plusieurs valeurs ?
    Par chuckichucki dans le forum Langage
    Réponses: 9
    Dernier message: 14/01/2011, 14h49
  2. Fonction qui renvoie plusieurs variables
    Par _Aravis dans le forum MATLAB
    Réponses: 1
    Dernier message: 28/09/2008, 20h55
  3. [Système] Fonction qui renvoie plusieurs valeurs
    Par sebhm dans le forum Langage
    Réponses: 6
    Dernier message: 26/01/2007, 09h43
  4. Réponses: 2
    Dernier message: 09/01/2006, 20h45
  5. [bioinfo] fonction qui renvoie chaîne à autre fonction
    Par perlaud dans le forum Bioinformatique
    Réponses: 11
    Dernier message: 16/07/2004, 16h06

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