Transformer un "string" en 'char'
Résolu
Killraider
Messages postés
65
Date d'inscription
Statut
Membre
Dernière intervention
-
Killraider Messages postés 65 Date d'inscription Statut Membre Dernière intervention -
Killraider Messages postés 65 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Convertir string en char c++
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Convertir epub en kindle - Guide
- Convertir youtube en mp3 avec audacity - Guide
- Convertir kindle en epub - Guide
- Convertir audio en texte word - Guide
8 réponses
Un std::string est déjà un tableau de cartère: un tableau n'est donc pas nécessaire, à moins que tu ne veuille un tableau de chaines de caractère. Il te faut donc juste définir
string nom;std::string dispose d'une fonction c_str() qui renvoie un pointeur vers un tableau de caractères correspondant. Pour copier 20 caractères de ce dernier, on peut utiliser memcpy:
memcpy(plan, nom.c_str(), std::min(nom.length(), 20));J'ai utilisé std::min pour la longueur a copier, car si nom fait moins de 20 caractères, memcpy va copier au-delà de la mémoire que nom utilise, et donc copier je-ne-sais-quoi (parfois source de bugs/crashs).
Merci pour ta réponse.
Je suis entrain de tester.
Code::Blocks me propose "memccpy" au lieu de "memcpy". J'ai cherché un peu et apparemment ces deux instructions sont les mêmes.
J'ai un autre problème:
> no matching function for call to 'min(std::basic_string<char>::size_type, int)'|
Je crois que c'est au niveau du min que ça ne va pas.
Voilà mon code au complet:
----------------------------------
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char plan [20];
string nom ="bonjour";
memcpy(plan[10], nom.c_str(), std::min (nom.length(),7));
for (int i=0; i<20;i++)
{
cout << plan[i];
}
}
Je suis entrain de tester.
Code::Blocks me propose "memccpy" au lieu de "memcpy". J'ai cherché un peu et apparemment ces deux instructions sont les mêmes.
J'ai un autre problème:
> no matching function for call to 'min(std::basic_string<char>::size_type, int)'|
Je crois que c'est au niveau du min que ça ne va pas.
Voilà mon code au complet:
----------------------------------
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char plan [20];
string nom ="bonjour";
memcpy(plan[10], nom.c_str(), std::min (nom.length(),7));
for (int i=0; i<20;i++)
{
cout << plan[i];
}
}
formidable !!!
CA MARCHE!!
Merci beaucoup!!
je ne ferme pas encore le sujet au cas où j'aurais d'autres questions sur ces instructions.
CA MARCHE!!
Merci beaucoup!!
je ne ferme pas encore le sujet au cas où j'aurais d'autres questions sur ces instructions.
J'ai une autre question, il copie chaque caractères de bonjour dans mon tableau plan .
Serait-il possible de lui dire de copier les caractères à partir d'une case spécifique de mon tableau plan?
memcpy(plan[10], nom.c_str(), (int) (nom.length(),7));
quand je mets plan[10] par exemple, j'ai une erreur.
invalid conversion from 'char' to 'void*' [-fpermissive]|
Serait-il possible de lui dire de copier les caractères à partir d'une case spécifique de mon tableau plan?
memcpy(plan[10], nom.c_str(), (int) (nom.length(),7));
quand je mets plan[10] par exemple, j'ai une erreur.
invalid conversion from 'char' to 'void*' [-fpermissive]|
plan est un tableau: toutes ses valeurs sont alignées en mémoire. Tableau = pointer.
Vive les maths!
En utilisant ça et en adaptant la longueur à copier comme il faut, tu pourra parvenir à un résultat.
Vive les maths!
plan+10est un pointeur qui pointe vers le 11eme caractère: plan renvoie déjà vers le 1er.
En utilisant ça et en adaptant la longueur à copier comme il faut, tu pourra parvenir à un résultat.
memcpy(plan+10, nom.c_str()+10, std::max(0, std::min((int)(nom.length()-10), 20-10)) );J'ai aussi mis un std::max pour que la longueur à copier ne descende pas en dessous de 0 si la longueur de nom est en dessous de 10.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Je te remercie encore pour ton aide. C'est ce dont j'avais besoin.
J'ai encore une autre question. Dans l'exemple ci dessus, les caractères de "bonjour" sont copiés dans un tableau à une dimension.
Est-il possible de les copier dans un tableau à deux dimensions?
J'ai essayé en mettant char plan[10][10]; mais le compilateur me renvoie une erreur?
En fait, le but de mon programme est de concevoir le plan d'une maison.
Pour cela, j'utilise un tableau plan à deux dimensions de char. L'utilisateur entre la position verticale, horizontale, la hauteur et la largeur de la pièce, elle se modélise sous forme de caractère '.' dans la console.
Mon programme étant presque fini, j'aimerais qu'une fois l'étape des dimensions passée, l'utilisateur entre le nom de la pièce (string) puis que celui ci s'affiche dans mon tableau à 2D de char.
J'ai encore une autre question. Dans l'exemple ci dessus, les caractères de "bonjour" sont copiés dans un tableau à une dimension.
Est-il possible de les copier dans un tableau à deux dimensions?
J'ai essayé en mettant char plan[10][10]; mais le compilateur me renvoie une erreur?
En fait, le but de mon programme est de concevoir le plan d'une maison.
Pour cela, j'utilise un tableau plan à deux dimensions de char. L'utilisateur entre la position verticale, horizontale, la hauteur et la largeur de la pièce, elle se modélise sous forme de caractère '.' dans la console.
Mon programme étant presque fini, j'aimerais qu'une fois l'étape des dimensions passée, l'utilisateur entre le nom de la pièce (string) puis que celui ci s'affiche dans mon tableau à 2D de char.
Je crois que je touche au but avec la méthode que tu m'as donné.
Si il est possible de l'utiliser sur un tableau à 2D ce serait parfait.
Si il est possible de l'utiliser sur un tableau à 2D ce serait parfait.