en Python, il existe un moyen de multiplier une chaîne, par exemple, "A" * 3 code> retournerait "AAA" code>. Toutefois, cette syntaxe ne fonctionne pas en C ++, cela me donne simplement une erreur, des opérandes non valides de types 'const Char [2]' et 'int' to binaire 'opérateur *' code>. Existe-t-il un moyen de multiplier une chaîne comme celle-ci en C ++? P>
3 Réponses :
Vous pouvez surcharger un opérateur
std::string operator*(const std::string& s, unsigned n)
{
... // your code here
}
L'opérateur ne sera pas ramassé lorsque l'opérande gauche est un littéral à chaîne, cependant.
Surcharges des opérateurs dont tous les arguments sont des types fondamentaux ou standard sont réservés à la norme.
Au lieu de std :: string code> Que diriez-vous d'utiliser * caractère code>.
@Palladen Vous ne pouvez pas ... Vous devez utiliser un type de classe ou d'enum.
Il n'y a pas d'opérateur de ce type en C ++. P>
Mais vous pouvez écrire une fonction qui prend une chaîne et un numéro comme argument et renvoie la chaîne répétée. P>
std :: string code> a également un constructeur qui répète un caractère donné à un certain nombre de fois. Cela peut être utile car vous avez utilisé une chaîne d'un caractère comme exemple. P>
Pas vraiment ... bien que vous puissiez bonne vous-même. C ++ est une bête très différente à Python. C'est beaucoup plus bas niveau et ce n'est pas aussi pardonnant.
C ++ traite de la mémoire "réelle" (comme c'était).
Vous ne pouvez pas vraiment dire simplement dire Vous pouvez implémenter votre propre version de Python's Je suggérerais d'utiliser un a également pensé à ce que vous essayez de vraiment faire. C ++ est tout sur la performance plutôt que la convivialité. Si vous essayez de définir plusieurs octets sur une certaine valeur, vous pouvez utiliser "A" * 3 code> car avant le "a" code> utilisé simplement 1 octet de mémoire si vous avez 3 "A" Code> Vous avez besoin de 3 octets. Et puisque le principal avantage de C ++ est capable de permettre à l'utilisateur d'auteur de son utilisation de la mémoire, C ++ ne créera pas seulement 3 octets supplémentaires. P>
"A" * 3 code> à l'aide de l'opérateur de surcharge (bien que vous deviez utiliser un type de classe comme chaîne) C ++ fournit, mais je ne recommanderais pas vraiment Ceci. P>
std :: vecteur code> et appendez le caractère autant de fois que vous le souhaitez. P>
std :: memset code> p>
D'où obtenez-vous ces informations?
Eh bien, l'erreur de compilateur dans la question de l'OP est déjà statistique, mais "A" est une chaîne i> NULL (NULL), donc "A" est {'A', '\ 0'}; Ainsi 2 octets. Je dis au moins parce que avec UTF8 ou toute autre utilisation non ASCII, un 'A' peut être beaucoup plus grand l'octet.
Je parlais davantage du fait que vous devez créer plus de mémoire. plutôt que la taille exacte .. merci
En C ++, il est probablement préférable de faire une fonction:
répétition de chaîne (chaîne s, taille_t n) {résultat de la chaîne; Résultat.Reserve (S.Size () * N); tandis que (n--) résultat + = S; Résultat de retour; } code>