10
votes

Comment convertir un char * pointeur en une chaîne C ++?

J'ai une chaîne C ++ . J'ai besoin de transmettre cette chaîne à une fonction acceptant un paramètre char * (par exemple - strchr () ).

a) Comment puis-je obtenir ce pointeur?

B) Y a-t-il une fonction équivalente à strrschr () qui fonctionne pour c ++ strings ?


0 commentaires

8 Réponses :


0
votes

Si STR dans votre chaîne utilise str.c_tr () méthode pour obtenir le char * à l'intérieur.


1 commentaires

Êtes-vous sûr qu'il est c_tsr et non c_str ? Je ne suis pas un expert C ++ mais j'ai googlé pour c_tsr et a été corrigé à c_str .



20
votes
  1. Pour obtenir le C équivalent de chaîne de Le c ++ chaîne objet Utilisez c_str fonction.
  2. localiser la première occurrence d'un Char dans une chaîne Utilisation de l'objet Find_First_of fonction.

    Exemple: xxx

    Remarque: j'ai donné le Strlen juste un exemple de fonction qui prend char * .


2 commentaires

@unicornaddict: merci. Maintenant, comment puis-je trouver les autres occurrences de ce caractère dans la chaîne? [La longueur de la chaîne est énorme, créant ainsi une nouvelle chaîne n'est pas une option]


@cambr: Il y a une version surchargée de Find_First_of qui accepte la position pour lancer la recherche de comme argument. J'ai posté un exemple ici: Ideone.com/beswl



6
votes

Étonnamment, STD :; String a de loin, bien plus de capacités que des cordes de style C. Vous voulez probablement le Find_First_of () Méthode. En général, si vous vous trouvez à l'aide des fonctions Strxxx () sur C ++ STD :: Strings, vous faites presque quelque chose de mal.

J'aime une grande partie de la bibliothèque standard C ++, la classe de cordes est une bête complexe. Pour en tirer le meilleur parti, vous avez vraiment besoin d'un bon livre de référence. Je recommande La bibliothèque standard C ++ , par Nicolai Josuttis.


0 commentaires

0
votes

Si vous voulez juste affecter un littéral à chaîne à pw, vous pouvez le faire comme xxx

si vous avez un objet C ++ STD :: objet de chaîne , le valeur dont vous voulez attribuer à pw , vous pouvez le faire comme

char * pw = quelque_string.c_str () < p> Cependant, la valeur que PW pointe ne sera valable que pour la durée de vie de certains_string.

plus ici:
Comment attribuer une chaîne à char * pw in c ++ < / a>

Goodluck !! / p>


2 commentaires

Tort. c_str () renvoie un const char *


Ce n'est pas une très bonne idée. Rien ne garantit que PW indiquera les mêmes données à un point ultérieur, même si quelqu'un est toujours autour. Il est beaucoup plus sûr d'appeler c_str () à chaque fonction que vous devez transmettre un caractère *.




0
votes
std::string yourString("just an example");
char* charPtr = new char[yourString.size()+1];
strcpy(charPtr, yourString.c_str());

2 commentaires

@Neil: C'est un exemple, jeez ... mais je l'ai modifié pour votre plaisir ;-)


Vous pouvez éviter la gestion de la mémoire manuelle en faisant std :: vecteur charbuf (yosstring.begin (), yostring.end ()); charbuf.push_back ('\ 0'); - Cela vous permettra d'utiliser & CHRBUF [0] pour obtenir un char * .



0
votes

Peut-être que cet exmaple vous aidera xxx


0 commentaires

0
votes

La norme C ++ fournit deux fonctions de membre de CLAASS STD :: basic_string qui retourner le pointeur sur le premier élément de la chaîne. Ils sont c_str () et données () . Mais le rendement de la const-à-bas, vous pouvez donc ne pas les utiliser avec une fonction de type char *.

comme pour la fonction Strchr, son premier paramètre est const char * . Vous pouvez donc utiliser c_str () et des données () avec cette fonction. Cependant, il est beaucoup préférable d'utiliser la fonction de membre trouver () de classe sttd :: basique_string au lieu de strchr.


0 commentaires