2010-04-08 22 views
6

Est-il possible de multiplier un caractère par un int? Par exemple, j'essaie de faire un graphique, avec des * pour chaque fois qu'un nombre se produit.Multiplier un caractère par un entier (C++)

donc quelque chose comme, mais cela ne fonctionne pas

char star = "*"; 
int num = 7; 

cout << star * num //to output 7 stars 
+1

@dubya, C++ balise est beaucoup plus utile ici que 'l'aide'. Pour commencer, nous pouvons supposer que vous avez besoin d'aide parce que, bien, vous posez une question ici :-) – paxdiablo

Répondre

21

Je ne dirais pas que l'opération « multiplication », qui est tout simplement déroutant. La concaténation est un meilleur mot.

Dans tous les cas, la classe de chaînes standard C++, nommée std::string, a un constructeur qui est parfait pour vous.

string (size_t n, char c); 

Le contenu est initialisé comme une chaîne formée par une répétition de caractère c, n fois.

vous pouvez donc aller comme ça:

char star = '*'; 
int num = 7; 
std::cout << std::string(num, star) << std::endl; 

Assurez-vous d'inclure l'en-tête pertinent, <string>.

+3

+1 pour référencer la bibliothèque std. Trop peu de gens font cela ces jours-ci. – Randolpho

+3

"Concaténation" est aussi un mauvais mot. Il n'y a pas vraiment de mot pour cela, mais je pense que l'itération se rapproche, puisque c'est vraiment ce que vous devez faire pour atteindre le résultat désiré. – SoapBox

+1

C'était "caténation" quand je l'ai écrit. – janks

6

la façon dont vous le faites fera une multiplication numérique de la représentation binaire du caractère '*' contre le numéro 7 et la sortie le nombre résultant .

Qu'est-ce que vous voulez faire (en fonction de votre C++ commentaire de code) est la suivante:

3

Vous pouvez le faire:

std::cout << std::string(7, '*'); 
6

GMan de plus-eningeering de ce problème qui m'a poussé à faire une méta-programmation modèle pour plus over-ingénieur il.

#include <iostream> 

template<int c, char ch> 
class repeater { 
    enum { Count = c, Char = ch }; 
    friend std::ostream &operator << (std::ostream &os, const repeater &r) { 
    return os << (char)repeater::Char << repeater<repeater::Count-1,repeater::Char>(); 
    } 
}; 

template<char ch> 
class repeater<0, ch> { 
    enum { Char = ch }; 
friend std::ostream &operator << (std::ostream &os, const repeater &r) { 
    return os; 
    } 
}; 

main() { 
    std::cout << "test" << std::endl; 
    std::cout << "8 r = " << repeater<8,'r'>() << std::endl; 
} 
+2

Ah, une réplique de méta-programmation me répond. Le plus excellent. +1 (attention, vous aurez des votes pour être "trop ​​intelligent") – GManNickG

+0

@GMan Donc utiliser un constructeur std :: string intégré est moins lisible qu'une boucle for, mais cela mérite un +1 de votre part? – joshperry

+0

@josh: Si vous n'avez jamais vu ma réponse, et la stupidité exprimée par certains utilisateurs sur cette question (et donc ma réponse à cette stupidité), cela n'aura aucun sens. – GManNickG

0

La déclaration doit être:

char star = "*"; 

(étoile * num) multipliera la valeur ASCII de '*' avec la valeur stockée dans num

Pour la sortie '*' n fois , suivez les idées des autres.

Espérons que cela aide.

0
//include iostream and string libraries 

using namespace std; 

int main() 
{ 

    for (int Count = 1; Count <= 10; Count++) 
    { 
     cout << string(Count, '+') << endl; 
    } 

    for (int Count = 10; Count >= 0; Count--) 
    { 
     cout << string(Count, '+') << endl; 
    } 


return 0; 

}

Questions connexes