Sziasztok!
1, Van-e a c++ nyelvben lehetőség formázott kimenetre, úgy mint a c-ben a printf() függvény? Tudom, hogy a printf() továbbra is rendelkezésre áll. A kérdés, hogy a "cout" tudja-e?
2, A c is, és a c++ is rosszul viszonyúl az ékezetes karakterekhez (legalábbis UBUNTU Linux esetén). Két karakternek számolja őket. Így pl. "ház" hosszának 4-et ad vissza nem 3-at. Ti hogy oldottátok meg a problámát?
Előre is kösz a válaszokat! Üdv: Pelci.
- 4730 megtekintés
Hozzászólások
1. iomanip
2. utf8-cpp
- A hozzászóláshoz be kell jelentkezni
1) C++ kimenő folyam formázása:
Az ios (ios_base char–ra specializált változata) különböző jelzőket tartalmaz, amik befolyásolják a folyam formázását
Jelzők:
ios::skipws – elválasztó karakterek kihagyása
ios::showbase – számrendszer ábrázolása
ios::showpoint – tizedespont lebegőpontos számoknál
ios::uppercase – nagybetűs A-F és E
ios::showpos – írja ki a „+” jelet pozitív számoknál
Függvények, amikkel lekérhető/állítható:
fmtflags ios::flags();
fmtflags ios::flags(fmtflags newflags);
fmtflags ios::setf(fmtflags ored_flag);
fmtflags ios::unsetf(fmtflags clear_flag);
Szélesség, kitöltés és pontosság:
Függvényekkel lekérhető/állítható:
int ios::width() – aktuális szélesség
int ios::width(int n) – szélesség beállítás
int ios::fill() – aktuális kitöltő karakter
int ios::fill(int n) – kitöltő karakter beállítás
int ios::precision() – aktuális lebegőpontos pontosság
int ios::precision(int n) – lebegőpontos pontosság beáll.
Függvényhívások helyett manipulátorokkal is formázható a folyam:
Használhatók a "<<" és ">>" operátorokkal egy kifejezésen belül
Paraméter nélküliek:
showbase, noshowbase – számrendszer ábrázolása
showpos, noshowpos – írja ki a „+” jelet pozitív számoknál
uppercase, nouppercase – nagybetűs A-F és E
showpoint, noshowpoint – tizedespont lebegőpontos számoknál
skipws, noskipws – elválasztó karakterek kihagyása
left, right, internal – igazítás
scientific, fixed – számformátum
Paraméterrel rendelkezők – effektorok:
setioflags(fmtflags n) – n-ben levő jelzőket állítja be
resetioflags(fmtflags n) – töröl minden jelzőt, majd az n-ben levő jelzőket állítja be
setbase(base n) – melyik számrendszerben ábrázolja
setfill(char n) – kitöltő karakter beállítás
setprecision(int n) – pontosság beállítás
setw(int n) – szélesség beállítás
Példa függvényekre:
#include <sstream>
using namespace std;
void main() {
ostringstream os;
os << (float)10 << endl;
os.setf(ios::showpos|ios::showpoint);
os << (float)10 << endl;
os.precision(5);
os << (float)10 << endl;
os << 0x10 << endl;
os.setf(ios::hex,ios::basefield);
os << 0x10 << endl;
string result = os.str();
}
Ugyanez a példa manipulátorokra:
#include <iostream>
#include <iomanip>
#include <sstream>
using namespace std;
void main() {
ostringstream os;
os << (float)10 << endl;
os << showpos << showpoint << (float)10 << endl;
os << setprecision(5) << (float)10 << endl;
os << 0x10 << endl;
os << hex << 0x10 << endl;
string result = os.str();
cout << result << endl;
}
Egyébként speciális függvényeket és manipulátorokat saját magad is írhatsz.
Az ékezetes problémával még nem foglalkoztam, és most sajna nincs időm rá, de elképzelhetőnek tartom, hogy template traits-el felül kell definiálnod a méret vizsgáló függvényt, amit használsz.
____________________________________________________________
Slackware 12/current - linux-2.6.23.12-olorin - KDE 3.5.8
- A hozzászóláshoz be kell jelentkezni
Srácok!
Köszönöm az értékes hozzászólásokat!
- A hozzászóláshoz be kell jelentkezni