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++/CLI Discussion :

array<String^,1> vers std::string *


Sujet :

C++/CLI

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Par défaut array<String^,1> vers std::string *
    Bonjour à tous,

    Petite question et sans doute tres bete... mais je bloque.

    Je dois passer par une fonction dont l'un des paramètre est un std::string* (une liste d'identifiant), alors que ces identifiants je les ai recupérer dans un array<String^,1>.

    Comment pourrais je faire pour passer de ce que j'ai vers le std::string*, s'il vous plait?

    Merci de vos suggestions.

    Kemanke

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Par défaut
    Bonjour,



    J'ai réussi à récupérer ma liste dans un vercteur de string, mais je ne sais toujours pas comment passer de ce vecteur vers un std::string*.

    peut etre serait il plus simple de passer d'un std::vector<std::string> vers un std::string *, quelqu'un pourrait il m'aider dans cette voix ci?

    Merci encore

    Kemanke

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    std::vector<std::string> vstrings;
    //remplir le vecteur
    //...
    std::string *pStrings = &vstrings[0];

    PS: Doit-il s'agit de std::string* ou bien de std::string const* ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Par défaut
    Bonjour Medinoc.

    En fait si je fait comme tu me le suggère, il y aura seulement le premier élément de mon vecteur qui sera copié dans mon std::string*.

    Hors (peut etre que je me trompe) mon std::string* désigne en quelque sorte un tableau. Comment pourrais je faire pour tout copier dans mon std::string*?

    quelque chose du genre(qui ne marche pas bien entendu):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    std::string* monStdString = new std::string[nombre_Element];
    std::vector<std::string> monVector(nombre_Element);
     
    monStdString[i] = &monVector[i];
    Merci de ton aide

    Kemanke

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    En C et C++, la différence entre "tableau" et "pointeur vers le premier élément du tableau" est assez faible...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Par défaut
    Salut Medinoc,

    Ok avec ce que tu as dit, alors comment faire un tableau dynamique de std::string ,car moi je n'y arrive pas.

    car si j'écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int nbElemement = RecupererNbElement();
    std::string liste[nbElemement];
    ne fonctionne pas, car il faut un nombre d'élement constant pour le créer.

    Y'aurait il une solution pour palier à ce problème?

    Merci beaucoup de ton aide.

    Kemanke

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Code C++/CLI : 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
    // http://dotnet.developpez.com/faq/cppcli/?page=conversion#Stringtostdstring
    std::string ConvertirEnStdString(System::String^ input)
    {
    	std::string ret;
    	IntPtr hGlob(nullptr);
    	try
    	{
    		hGlob = System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(chaineManagee);
    		char * chaineChar = static_cast<char *>(hGlob.ToPointer());
    		ret.assign(chaineChar);
    	}
    	finally
    	{
    		System::Runtime::InteropServices::Marshal::FreeHGlobal(hGlob);
    	}
    	return ret;
    }
     
    std::string* ConvertirEnTableauDeStdString(array< System::String^ >^ input)
    {
    	if(input == nullptr)
    		return nullptr;
    	std::string * output = new std::string[input->Length];
    	for(int i=0 ; i<input->Length ; i++)
    		output[i] = ConvertirEnStdString(input[i]);
    	return output;
    }
    Ou, en utilisant un vecteur:
    Code C++/CLI : 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
    std::vector<std::string> ConvertirEnVecteurDeStdString(array< System::String^ >^ input)
    {
    	std::vector<std::string> output;
    	if(input == nullptr)
    		return output;
    	for each(System::String^ s in input)
    	{
    		output.push_back(ConvertirEnStdString(s));
    	}
    	return output;
    }
     
    int main(void)
    {
    	array< System::String^ >^ tableauDeSystemStrings = FonctionQuiRetourneUnTableauDeSystemStrings();
     
    	std::vector< std::string > vecteurDeStdStrings = ConvertirEnVecteurDeStdString(tableauDeSystemStrings);
     
    	FonctionQuiPrendUnTableauDeStdStrings(&vecteurDeStdStrings[0], vecteurDeStdStrings.size());
    	return 0;
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Conversion const char* vers std::string
    Par scheme dans le forum C++
    Réponses: 4
    Dernier message: 21/09/2010, 11h02
  2. Convertir une std::string de utf8 vers cp850
    Par dj.motte dans le forum SL & STL
    Réponses: 7
    Dernier message: 30/10/2008, 22h15
  3. Conversion std::string vers numérique
    Par mister3957 dans le forum SL & STL
    Réponses: 9
    Dernier message: 26/02/2007, 20h40
  4. cannot convert 'std::string' to 'System::String ^'
    Par broadhead dans le forum MFC
    Réponses: 1
    Dernier message: 14/06/2005, 11h37
  5. std::string, operator =
    Par tut dans le forum SL & STL
    Réponses: 10
    Dernier message: 05/11/2004, 12h07

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