2015-11-11 10 views
7

Ho una classe polinomiale e la sua rappresentazione naturale è i suoi coefficienti. Se è impostato un coefficiente, è 1 per la base binomiale, 1 o 2 per la base trinomiale, ecc. Ad esempio, in base al binomio, X + 1 è rappresentato come 101; e in base trinomiale, 2X +1 è rappresentato come 201.Utilizzare ostream con basi diverse da 8, 10 e 16

La classe fornisce un sovraccarico operator<<. Internamente, la classe rappresenta i coefficienti utilizzando una matrice integrale. Quindi dovrei essere in grado di eseguire:

ostringstream oss; 
for (size_t i=0; i<v.size(); i++) 
    oss << v[i]; 

Il problema che sto avendo è che non so come configurare l'ostream per supporti di materia diversa 8, 10 e 16. ios_base fornisce std::oct, std::dec e std::hex per la basi popolari, ma non vedo cosa usare per le basi meno utilizzate. E pagine come C++ Reference on ios_base non discutono su cosa usare.

Come si usa ostream con basi diverse da 8, 10 e 16?

+1

No, non c'è supporto per altre basi. Devi convertirlo in una stringa ed emetterlo. –

+4

Non sono sicuro se ciò è possibile usando mezzi standard. Guardando http://en.cppreference.com/w/cpp/io/manip/setbase - "I valori di base diversi da 8, 10 o 16 ripristinano il campo base a zero, che corrisponde all'output decimale e all'input dipendente da prefisso. " – jready

+0

A meno che qualcosa di cui non so sia stato aggiunto molto recentemente, non c'è supporto per basi diverse da 8, 10 e 16 in iostream. Dovrai leggere numeri come stringhe e decodificarli a mano. – zwol

risposta

0

Sostituire la mia risposta poiché la direzione era indietro. Vedi itoa. La documentazione dice che è una funzione non standard. Poiché questa è una funzione non standard, stackoverflow ha alcune implementazioni nella pagina.

+2

Sfortunatamente l'OP chiede il contrario. Avranno bisogno di fornire il proprio manipolatore IO. Ovviamente questa implementazione dovrebbe produrre una rappresentazione di stringa che conferma ciò che 'stoi()' è in grado di convertire nuovamente in un numero. –

+1

'setbase' non sembra funzionare come previsto. Dalla pagina citata: * "... I valori di base diversi da 8, 10 o 16 ripristinano il campo base su zero, che corrisponde all'output decimale e all'ingresso dipendente dal prefisso." * – jww

+0

@ πάνταῥεῖ. Risolto il problema con la mia risposta Grazie per il testa a testa. –

4

Non penso che questo sia possibile utilizzando i mezzi standard. Guardando std::setbase

Valori di base diversa da 8, 10, o 16 resettato basefield a zero, il che corrisponde a decimale uscita e di ingresso prefisso-dipendente.

Problemi correlati