|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
[C++/Qt] Classe equivalente a stringstream??
Ciao,
sto programmando una calcolatrice scientifica che effettua il parsing dell'input, in Qt. Al momento leggo l'espressione utilizzando una stringstream, ma vorrei passare all'equivalente Qt di questa classe, per poter utilizzare QChar, QString eccetera per maneggiare i caratteri unicode (tipo radice quadrata e superscript 2 e 3). Ho provato ad usare QTextStream ma non ho capito bene se è questa la classe giusta, perchè rispetto a stringstream mancano alcune funzioni: in.eof() c'è ed è in.atEnd(), ma Codice:
in.get() inoltre Codice:
in.putback() Infine, la conversione a bool non è definita e non posso scrivere: Codice:
while (in >> ch) Grazie |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
Possibile che nessuno nella rete, perlomeno per quel che sono riuscito a trovare, non si sia mai posto il problema di come manipolare delle stringstream usando le Qt???
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Ma che problema hai ad utilizzare direttamente stringstream?
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
|
Un parser è una unità totalmente logica, secondo me ti conviene svincolarla dalle librerie qt e andare direttamente di librerie standard e stringstream. E' più semplice, diretto e portabile (utilizzando invece le qt la portabilità va a farsi benedire).
Ps: ho notato ora che il tuo dubbio deriva dal voler utilizzare stringhe unicode. In realtà questo ti è permesso anche dalla libreria standard. Ricorda che la libreria standard fornisce tipi stringa diversi, in base alla "tipologia di caratteri" utilizzata: char --> string wchar_t -->wstring (questi ultimi solo per c++11) char16_t --> u16string char32_t --> u32string Ricorda, nel caso, di utilizzare i relativi metodi per manipolare le stringhe, quindi, per esempio, se usi una wstring non usare strncpy, ma wcscpy. Ultima modifica di [Kendall] : 09-03-2012 alle 11:36. |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
Uhm...grazie dell'input!
Ho letto un po' in giro e non ho ben capito se wchar_t tiene gli unicode a 16 bit o solo fino a 8...proverò, nel caso dovrò restringere l'elenco dei caratteri matematici che implemento. |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
|
Quote:
Codice:
const wstring stringawide = L"pippo"; wcout << stringawide; Similarmente per le stringhe/caratteri di char16_t e char32_t si usa rispettivamente u e U |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
Ok mi ci metto più tardi stasera, vediamo che riesco a fare, al momento ho una QString per l'espressione che l'utente vede e una per il parser con caratteri char, tipo:
Codice:
²√9+81⁻¹ Codice:
$r9+81_£ Utilizzarne una sola accorcerebbe di molto il codice, sarebbe più elegante e semplificherebbe un pelo lo spostamento del cursore per modificare/eliminare parti dell'espressione. Per ora, grazie!! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:38.




















