-1
votes

Existe-t-il un moyen de multiplier une chaîne et un entier en C ++?

en Python, il existe un moyen de multiplier une chaîne, par exemple, "A" * 3 retournerait "AAA" . 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 *' . Existe-t-il un moyen de multiplier une chaîne comme celle-ci en C ++?


1 commentaires

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; }


3 Réponses :


0
votes

Vous pouvez surcharger un opérateur

std::string operator*(const std::string& s, unsigned n)
{
    ... // your code here
}


4 commentaires

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 Que diriez-vous d'utiliser * caractère .


@Palladen Vous ne pouvez pas ... Vous devez utiliser un type de classe ou d'enum.



2
votes

Il n'y a pas d'opérateur de ce type en C ++.

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.

std :: string 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.


0 commentaires

0
votes

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 "A" * 3 car avant le "a" utilisé simplement 1 octet de mémoire si vous avez 3 "A" 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.

Vous pouvez implémenter votre propre version de Python's "A" * 3 à 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.

Je suggérerais d'utiliser un std :: vecteur et appendez le caractère autant de fois que vous le souhaitez.

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 std :: memset


4 commentaires

"A" est (au moins) deux octets


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 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