Π Π΅ΡΠ΅ΠΏΡ 3.2.
3.2. ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΡΠ΅Π» Π² ΡΡΡΠΎΠΊΠΈ
ΠΠΌΠ΅ΡΡΡΡ ΡΠΈΡΠ»ΠΎΠ²ΡΠ΅ ΡΠΈΠΏΡ (int, float), ΠΈ Π²Π°ΠΌ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π² string, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΡΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π².
Π Π΅ΡΠ΅Π½ΠΈΠ΅ΠΠ»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π΅ΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ², ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠΈ Π΄ΠΎΡΡΠΎΠΈΠ½ΡΡΠ²Π° ΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ. ΠΠ΅ΡΠ²Π°Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅ΠΌΠ°Ρ ΠΌΠ½ΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΡΡΠΎΠΊΠΎΠ²ΡΡ Π΄Π°Π½Π½ΡΡ ΠΊΠ»Π°ΡΡ stringstream, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ ΠΏΡΠΎΡΡ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ. ΠΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 3.3. Π‘ΠΌΠΎΡΡΠΈ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊ.
ΠΡΠΈΠΌΠ΅Ρ 3.3. Π€ΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΡΠ»Π° ΠΊΠ°ΠΊ ΡΡΡΠΎΠΊΠΈ
#include <iostream>
#include <iomanip>
#include <string>
#include <sstream>
using namespace std;
int main() {
stringstream ss;
ss << "Π ΠΌΠΎΠ΅ΠΉ ΠΊΠΎΡΠ·ΠΈΠ½Π΅ " << 9 << " ΡΠ±Π»ΠΎΠΊ.";
cout<<ss.str() <<endl; //stringstream::str() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ string
// Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ
ss.str(""); // ΠΡΠΈΡΡΠΊΠ° ΡΡΡΠΎΠΊΠΈ
ss << showbase << hex << 16; // ΠΠΎΠΊΠ°Π·Π°ΡΡ ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΠΎΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅
cout << "ss = " << ss.str() << endl;
ss.str("");
ss << 3.14;
cout << "ss = " << ss.str() << endl;
}
ΠΡΠ²ΠΎΠ΄ ΠΏΡΠΈΠΌΠ΅ΡΠ° 3.3 Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ.
Π ΠΌΠΎΠ΅ΠΉ ΠΊΠΎΡΠ·ΠΈΠ½Π΅ 9 ΡΠ±Π»ΠΎΠΊ.
ss = 0x10
ss = 3.14
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅stringstream β ΡΡΠΎ ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ Π² string, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΠ΅ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° ΠΈ Π²ΡΠ²ΠΎΠ΄Π°. Π ΠΏΡΠΎΡΡΠ΅ΠΉΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 3.3 Ρ Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ ΡΠ΅ΠΊΡΡΠ° ΠΈ ΡΠΈΡΠ»ΠΎΠ²ΡΡ Π΄Π°Π½Π½ΡΡ Π² ΡΡΡΠΎΠΊΠΎΠ²ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΠΏΡΠΎΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΡΠ΄Π²ΠΈΠ³Π° Π²Π»Π΅Π²ΠΎ (<<).
ss << "Π ΠΌΠΎΠ΅ΠΉ ΠΊΠΎΡΠ·ΠΈΠ½Π΅ " << 9 << " ΡΠ±Π»ΠΎΠΊ.";
ΠΠΏΠ΅ΡΠ°ΡΠΎΡ << ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ΅Π½ Π΄Π»Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΡΠΈΠΏΠΎΠ² ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ΅Ρ Π²ΡΠ²ΠΎΠ΄. ΠΠΎΠ³Π΄Π° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅, Ρ ΡΠ°Π½ΡΡΠΈΠ΅ΡΡ Π² string, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ-ΡΠ»Π΅Π½ str.
cout << ss.str() << endl;
Π <iomanip> ΠΈΠΌΠ΅Π΅ΡΡΡ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΎΡΠΎΠ² ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ, ΠΈ ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΈ Π²ΡΠ²ΠΎΠ΄Π΅ ΡΠΈΡΠ»ΠΎΠ²ΡΡ Π΄Π°Π½Π½ΡΡ Π² ΡΡΡΠΎΠΊΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π²ΡΠ΅ Π²ΠΈΠ΄Ρ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 3.3 Π΄Π»Ρ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΡΠ»Π° ΠΊΠ°ΠΊ ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΠΎΠ³ΠΎ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» showbase ΠΈ hex, Π½ΠΎ Π΅ΡΡΡ Π΅ΡΠ΅ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠΎΡΠ½ΠΎΡΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΎΡΠ»ΠΈΡΠ½ΡΡ ΠΎΡ ΡΠΈΡΠ»Π° Π΄Π΅ΡΡΡΠΈΡΠ½ΡΡ Π·Π½Π°ΠΊΠΎΠ² ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
ss << setprecision(6) << 3.14285;
ΠΠ΄Π½Π°ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΎΡΠΎΠ² ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ ΡΠ°ΠΌΠΎΠΉ ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½ΠΎ ΠΏΠΎΠ½ΡΡΠ½ΠΎΠΉ Π²Π΅ΡΡΡ, ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΡΡΠΎΠΌΡ ΡΠΎΠ·Π΄Π°Π½ ΡΠ΅ΡΠ΅ΠΏΡ, ΠΏΠΎΡΠ²ΡΡΠ΅Π½Π½ΡΠΉ ΠΈΠΌ. ΠΠ° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΎ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΈΡΠ»ΠΎΠ²ΡΡ Π΄Π°Π½Π½ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΎΡΠΎΠ² ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ΡΡ ΠΊ ΡΠ΅ΡΠ΅ΠΏΡΡ 10.2.
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΊΠ°ΠΊ ΡΠ°ΡΡΠΎ Π±ΡΠ²Π°Π΅Ρ Π² Π‘++, ΠΈΠΌΠ΅Π΅ΡΡΡ ΠΈ Π΄ΡΡΠ³ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ±. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Boost Format (Π½Π°ΠΏΠΈΡΠ°Π½Π½Π°Ρ Π‘ΡΠΌΡΡΠ»Π΅ΠΌ ΠΡΠ΅ΠΌΠΏΠΏΠΎΠΌ (Samuel Krempp) ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠ»Π°ΡΡ format, ΠΊΠΎΡΠΎΡΡΠΉ Π΄Π΅Π»Π°Π΅Ρ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΡΠΌΠΈ. ΠΡΠΈΠΌΠ΅Ρ 3.4 ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅.
ΠΡΠΈΠΌΠ΅Ρ 3.4. Π€ΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅Π»ΡΡ Π² ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅
#include <iostream>
#include <boost/format.hpp>
using namespace std;
using boost::format;
using boost.:io::str;
using boost::io::format_error;
int main() {
try {
format f("ΠΠΌΠ΅Π΅ΡΡΡ %1% ΡΠΏΠΎΡΠΎΠ±Π°. %2% %3% %4%");
f % 3;
f % "ΡΡΠΎΠ±Ρ" % "ΡΡΠΎ" % "ΡΠ΄Π΅Π»Π°ΡΡ.";
cout << f << endl;
f.clear(); // Π‘ΡΠΈΡΡΠΊΠ° Π±ΡΡΠ΅ΡΠΎΠ² Π΄Π»Ρ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ Π΅ΡΠ΅
f.parse("ΠΡΠΎ ΡΡΠΎΠΈΡ $%d.");
f % 50;
cout << f << endl;
int x = 11256099;
string strx = str(format("%x") % x);
cout << strx << endl;
} catch (format_error &e) {
cout << e.what() << endl;
}
}
ΠΠΎΡ ΡΡΠΎ Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΠΌΠ΅Π΅ΡΡΡ 3 ΡΠΏΠΎΡΠΎΠ±Π°, ΡΡΠΎΠ±Ρ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ.
ΠΡΠΎ ΡΡΠΎΠΈΡ $50.
abc123
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° format ΡΡΠ΅Π±ΡΠ΅Ρ Π΄Π²ΡΡ ΡΠ°Π³ΠΎΠ², Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° format ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅ΠΌΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ. ΠΠ»Ρ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠ΅Π³ΠΎ ΡΠ»ΡΡΠ°Ρ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 3.4 Ρ ΡΠΎΠ·Π΄Π°Π» ΠΎΠ±ΡΠ΅ΠΊΡ format Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠ΅ΠΉ Π²Π΅ΡΡΠΈΠΈ Π΅Π³ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ°.
format f(" ΠΠΌΠ΅Π΅ΡΡΡ %1% ΡΠΏΠΎΡΠΎΠ±Π°, %2% %3% %4%");
Π ΡΡΡΠΎΠΊΠ΅ ΡΠΎΡΠΌΠ°ΡΠ° Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΠΈ β ΡΡΠΎ ΡΠΈΡΠ»Π°, ΠΎΠ±ΡΠ°ΠΌΠ»Π΅Π½Π½ΡΠ΅ Ρ ΠΎΠ±Π΅ΠΈΡ ΡΡΠΎΡΠΎΠ½ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ %. ΠΠ°ΡΠ΅ΠΌ Ρ Π½Π°ΡΠΈΠ½Π°Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π² ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ°.
f % 3;
f % "ΡΡΠΎΠ±Ρ" % "ΡΡΠΎ" % "ΡΠ΄Π΅Π»Π°ΡΡ;
ΠΠΏΠ΅ΡΠ°ΡΠΎΡ % Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π±ΡΠ» ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ Π² Π½Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π² Π»Π΅Π²ΡΡ ΡΠ°ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° format. ΠΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· Π½Π° ΡΡΡΠΎΠΊΡ, ΡΠ°ΠΊ ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· Π² ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅. ΠΠ½ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ΅Π½ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ << Π΄Π»Ρ ΡΡΡΠΎΠΊ. Π§ΡΠΎ ΠΆΠ΅ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° <<, ΠΎΠ½ ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ» ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΡΠ°ΠΊ, ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΡ format ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π·Π°ΠΏΠΈΡΠ°ΡΡ Π² Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π΅ΡΠ»ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π² ΡΡΡΠΎΠΊΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ-ΡΠ»Π΅Π½ str.
string s = f.str();
ΠΡΠ»ΠΈ ΠΆΠ΅ Π²Π°ΠΌ Π½ΡΠ°Π²ΠΈΡΡΡ printf, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΡΠΌΠ°ΡΠ½ΡΡ ΡΡΡΠΎΠΊΡ printf.
f.parse("ΠΡΠΎ ΡΡΠΎΠΈΡ $%d.*");
f % 50;
ΠΡΠ»ΠΈ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΠΈΡΠ°Π½ΠΎ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ°Π»ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ°, ΡΠΎ ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ Π·Π°ΠΏΠΈΡΠ°ΡΡ ΡΡΡΠΎΠΊΡ Π² ΠΏΠΎΡΠΎΠΊ ΠΈΠ»ΠΈ ΠΈΠ·Π²Π»Π΅ΡΡ ΠΎΡΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΡΡΠΎΠΊΡ Π±ΡΠ΄Π΅Ρ Π²ΡΠ±ΡΠΎΡΠ΅Π½ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ format_error (ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡ thereof).
ΠΠ»Π°ΡΡ format Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΌΠΎΡΠ΅Π½ ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΡΠΎΠ±Ρ ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΎΠΏΠΈΡΠ°ΡΡ Π·Π΄Π΅ΡΡ, ΠΈ Π΅Π³ΠΎ ΡΡΠΎΠΈΡ ΠΈΠ·ΡΡΠΈΡΡ. Π§ΡΠΎΠ±Ρ ΡΠΊΠ°ΡΠ°ΡΡ Boost ΠΈΠ»ΠΈ ΠΏΠΎΡΠΈΡΠ°ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ, ΠΏΠΎΡΠ΅ΡΠΈΡΠ΅ web-ΡΠ°ΠΉΡ Boost ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ www.boost.org.
Π’Π°ΠΊΠΆΠ΅ Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΡΠ΅Π» ΠΈΠ· ΡΠΈΡΠ»ΠΎΠ²ΡΡ ΡΠΈΠΏΠΎΠ² Π² ΡΡΡΠΎΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ sprintf ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠ΅ Π΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠ±ΡΡΠ½ΠΎ ΡΡΠΎΠ³ΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠ·Π±Π΅Π³Π°ΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΡΠΎ Π½Π΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΠΈ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΠΌΠ΅ΡΡΡΡ Π»ΡΡΡΠΈΠ΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ.
Π‘ΠΌΠΎΡΡΠΈ ΡΠ°ΠΊΠΆΠ΅ΠΠ»Π°Π²Π° 10.
3.3. ΠΡΠΎΠ²Π΅ΡΠΊΠ°, ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π»ΠΈ ΡΡΡΠΎΠΊΠ° Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΡΠΈΡΠ»ΠΎ
ΠΠΌΠ΅Π΅ΡΡΡ ΡΡΡΠΎΠΊΠ° string ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π»ΠΈ ΠΎΠ½Π° Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΡΠΈΡΠ»ΠΎ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅ΠΠ»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΡΡΠΈ ΡΠΈΡΠ»Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π±Π»ΠΎΠ½ ΡΡΠ½ΠΊΡΠΈΠΈ lexical_cast Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Boost. ΠΡΠΈ ΡΠ°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΊΠ»ΡΡΠ°ΡΡ ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ Π·Π½Π°ΠΊ ΠΌΠΈΠ½ΡΡ, ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ Π·Π½Π°ΠΊ ΠΏΠ»ΡΡ, Π½ΠΎ Π½Π΅ ΠΏΡΠΎΠ±Π΅Π». Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 3.5 ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠ±ΡΠ°Π·ΡΠΎΠ² ΡΠΈΠΏΠΎΠ² ΡΠΎΡΠΌΠ°ΡΠΎΠ², Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ lexical_cast.
ΠΡΠΈΠΌΠ΅Ρ 3.5. ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΈΡΠ»ΠΎΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ
#include <iostream>
#include <boost/lexical_cast.hpp>
using namespace std;
using boost::lexical_cast;
using boost::bad_lexical_cast;
template<typename T>
bool isValid(const string& num) {
bool res = true;
try {
T tmp = lexical_cast<T>(num);
} catch (bad_lexical_cast &e) {
res = false;
}
return(res);
}
void test(const string& s) {
if (isValid<int>(s))
cout << s << " - Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ." << endl;
else
cout << s << " - HE Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ." << endl;
if (isValid<double>(s))
cout << s << " - Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ." << endl;
else
cout << s << " - HE Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ." << endl;
if (isValid<float>(s))
cout << s << " - Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΡΠ½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ." << endl;
else
cout << s << " - HE Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΡΠ½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ " << endl;
}
int main() {
test("12345");
test("1.23456");
test("-1.23456");
test(" - 1.23456");
test("+1.23456");
test(" 1.23456 ");
test("asdf");
}
ΠΠΎΡ Π²ΡΠ²ΠΎΠ΄ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°.
12345 - Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ.
12345 - Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ.
12345 - Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΡΠ½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ.
1.23456 - ΠΠ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ.
1.23456 - Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ.
1.23456 - Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΡΠ½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ.
-1.23456 - ΠΠ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ.
-1.23456 - Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ.
-1.23456 - Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΡΠ½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ.
- 1.23456 - ΠΠ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ.
- 1 23466 - ΠΠ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ.
- 1.23456 - ΠΠ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΡΠ½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ.
+1.23456 - ΠΠ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ.
+1.23456 - Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ.
+1.23456 - Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΡΠ½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ.
1.23456 - ΠΠ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ.
1.23456 - ΠΠ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ.