2010-04-08 305 views
6

¿Es posible multiplicar un carácter por un int?Multiplicar char por entero (C++)

Por ejemplo, estoy tratando de hacer un gráfico, con * 's cada vez que aparece un número.

Así que algo así, pero esto no funciona

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

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

@dubya, etiqueta de la C++ es mucho más útil aquí que 'ayuda'. Para empezar, podemos suponer que necesita ayuda porque, bueno, está haciendo una pregunta aquí :-) – paxdiablo

Respuesta

21

Yo no llamaría a esa operación "multiplicación", que es simplemente confuso. Concatenación es una palabra mejor.

En cualquier caso, la clase de cadena estándar de C++, llamada std::string, tiene un constructor que es perfecto para usted.

string (size_t n, char c); 

contenido se inicializa como una cadena formada por una repetición de carácter c, n veces.

Así se puede ir así:

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

Asegúrese de incluir el encabezado correspondiente, <string>.

+3

+1 para hacer referencia a la biblioteca estándar. Muy poca gente hace eso en estos días. – Randolpho

+3

"Concatenación" es también una mala palabra. Realmente no hay una palabra para esto, pero la 'iteración' creo que se acerca, ya que eso es realmente lo que tienes que hacer para lograr el resultado deseado. – SoapBox

+1

Fue 'catenation' cuando lo escribí. – janks

6

la forma en que lo está haciendo va a hacer una multiplicación numérica de la representación binaria del carácter '*' con el número 7 y la salida el número resultante .

Lo que quiere hacer (basado en C++ comentario de código) es la siguiente:

3

Usted puede hacer esto: el exceso de eningeering de este problema

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

de GMan me inspiró a hacer algo de plantilla meta-programación para seguir el exceso de utilizar técnicas de ingeniería.

#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, una contraparte de meta-programación para mí, respuesta. El mas excelente. +1 (Atención, obtendrás votos por ser "demasiado inteligente") – GManNickG

+0

@GMan Entonces, usar un constructor std :: string incorporado es menos legible que un for-loop, pero esto merece un +1 de ti? – joshperry

+0

@josh: Si nunca viste mi respuesta, y la estupidez expresada por algunos usuarios sobre esta pregunta (y por lo tanto mi respuesta a esa estupidez), esto no tendrá sentido. – GManNickG

0

La declaración debe ser:

char star = "*"; 

(estrella * num) se multiplica el valor ASCII de '*' con el valor almacenado en num

Para dar salida a '*' n veces , sigue las ideas vertidas por otros.

Espero que esto ayude.

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; 

}