2010-04-08 13 views
6

È possibile moltiplicare un carattere di un int?Carattere moltiplicato per intero (C++)

Ad esempio, sto cercando di creare un grafico, con * per ogni volta che si verifica un numero.

Quindi qualcosa di simile, ma questo non funziona

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

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

@dubya, etichetta il C++ è molto più utile qui che 'help'. Per cominciare, possiamo presumere che tu abbia bisogno di aiuto perché, beh, stai facendo una domanda qui :-) – paxdiablo

risposta

21

Non direi che l'operazione "moltiplicazione", che è solo confusione. La concatenazione è una parola migliore.

In ogni caso, la classe di stringhe standard C++, denominata std::string, ha un costruttore che è perfetto per te.

string (size_t n, char c); 

contenuto viene inizializzato come una stringa formata da una ripetizione di carattere c, n volte.

Così si può andare in questo modo:

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

Assicurati di includere l'intestazione in questione, <string>.

+3

+1 per referenziare la libreria std. Troppi pochi lo fanno in questi giorni. – Randolpho

+3

"Concatenazione" è anche una parolaccia. Non c'è davvero una parola per questo, ma 'iterazione' penso che si avvicini, poiché è proprio quello che devi fare per ottenere il risultato desiderato. – SoapBox

+1

Era "catenation" quando l'ho scritto. – janks

6

il modo in cui si sta facendo farà una moltiplicazione numerica della rappresentazione binaria del carattere '*' contro il numero 7 e l'uscita il numero risultante .

Che cosa si vuole fare (in base al codice C++ commento) è questo:

3

Si potrebbe fare questo: over-eningeering

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

di Gman di questo problema mi ha spinto a fare un po 'modello di meta-programmazione per ulteriori over-ingegnere di esso.

#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 meta-programmazione contro-parte per me risposta. Più eccellente. +1 (Attenzione, i voti per essere "troppo intelligenti") – GManNickG

+0

@GMan Quindi usare un built-in std :: string constructor è meno leggibile di un for-loop, ma questo merita un +1 da te? – joshperry

+0

@josh: Se non hai mai visto la mia risposta e la stupidità espressa da alcuni utenti su questa domanda (e quindi la mia risposta a quella stupidità), questo non ha senso. – GManNickG

0

La dichiarazione dovrebbe essere:

char star = "*"; 

(stella * num) sarà moltiplicare il valore ASCII di '*' con il valore memorizzato in num

Per l'uscita '*' n volte , segui le idee versate da altri.

Spero che questo aiuti.

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; 

}