Comment utiliser la chaîne et de la chaîne de pointeurs en C++
Je suis très confus au sujet de quand utiliser des chaînes de caractères (char) et quand utiliser des pointeurs de chaîne (char pointeurs en C++. Voici deux questions que je vais avoir.
laquelle des deux suivants est correct?
string subString;
subString = anotherString.sub(9);
string *subString;
subString = &anotherString.sub(9);
dont l'un des deux suivants est correct?
char doubleQuote = aString[9];
if (doubleQuote == "\"") {...}
char *doubleQuote = &aString[9];
if (doubleQuote == "\"") {...}
Vous devez vous connecter pour publier un commentaire.
Aucun d'entre eux sont corrects.
La fonction de membre de
sub
n'existe pas de chaîne, sauf si vous utilisez un autrestring
classe qui n'est passtd::string
.Le deuxième de la première question
subString = &anotherString.sub(9);
n'est pas sûr, comme vous allez le stockage de l'adresse temporaire. C'est également à tort queanotherString
est un pointeur vers un objet de type string. Pour appeler lasub
fonction de membre, vous devez écrireanotherString->sub(9)
. Et de nouveau, membre de la fonctionsub
n'existe pas.La première, de la deuxième question est plus correct que le second; tout ce que vous devez faire est de remplacer
"\""
avec'\"'
.Le deuxième de la deuxième question qui est mal, comme:
doubleQuote
ne fait pas référence à la 10ème caractère, mais la chaîne à partir de la 10ème caractère à partir dedoubleQuote == "\""
peut être de type sage correct, mais ça ne se compare pas l'égalité de deux chaînes; il vérifie si elles pointent vers la même chose. Si vous souhaitez vérifier l'égalité de deux chaînes, utilisez strcmp.En C++, vous pouvez (et devez) utiliser toujours
std::string
(en se souvenant que les littéraux de chaîne sont effectivement zéro terminée par des tableaux de caractères). Utilisationchar*
uniquement lorsque vous avez besoin de faire l'interface avec du code C.C-style cordes ont besoin d'erreurs manuel de gestion de la mémoire, explicitement copie de chaînes (copie des pointeurs n'est pas de copier la chaîne), et vous avez besoin de prêter attention à des détails comme d'allouer suffisamment de mémoire pour avoir appelé à disparaître
'\0'
ajustement, tandis que lesstd::string
prend soin de tout cela automatiquement.Pour la première question, le premier échantillon, en supposant que sous retourne une sous-chaîne de la chaîne.
Pour la deuxième, aucun:
Erm, êtes-vous à l'aide de la chaîne de STL?
(c'est à dire que vous avez quelque chose comme
au début de votre fichier source 😉 )
ce serait comme
ou vous pouvez écrire
au lieu de crochets.
Peut être ces exemples peuvent aider.
std::string
n'appartient pas à la partie de la std lib qui est venu de la STL.mystring[9]
œuvres, trop. C'est juste questd::string::at()
vérifie son argument, alors questd::string::operator[]()
ne l'est pas. Cela dépend de qui vous avez besoin.