ayrıştırmak için "sscanf" yerine stringstream kullanıyorum stringstream
tarafından sağlanan olanakları kullanmak için sabit biçimli değerleri sscanf
türüne güvenli bir alternatif olarak ayıklamak için kullanın. Bunu nasıl yapabilirim? Aşağıdaki özel kullanım durumunu inceleyin. Aşağıdaki sabit biçimde bir std::string
var:Sabit biçimdeki bir dizeyi
YYYYMMDDHHMMSSmmm
Nerede:
YYYY = 4 digits representing the year
MM = 2 digits representing the month ('0' padded to 2 characters)
DD = 2 digits representing the day ('0' padded to 2 characters)
HH = 2 digits representing the hour ('0' padded to 2 characters)
MM = 2 digits representing the minute ('0' padded to 2 characters)
SS = 2 digits representing the second ('0' padded to 2 characters)
mmm = 3 digits representing the milliseconds ('0' padded to 3 characters)
Daha önce ben bu satırlar boyunca bir şey yapıyordu:
string s = "20101220110651184";
unsigned year = 0, month = 0, day = 0, hour = 0, minute = 0, second = 0, milli = 0;
sscanf(s.c_str(), "%4u%2u%2u%2u%2u%2u%3u", &year, &month, &day, &hour, &minute, &second, &milli);
genişlik değerleri sihirli sayılar ve sorun değil. Bu değerleri ayıklamak ve tür güvenliği için unsigned
s'ye dönüştürmek için akışları kullanmak istiyorum. Ben çalıştığınızda Ama bu:
stringstream ss;
ss << "20101220110651184";
ss >> setw(4) >> year;
year
değerini 0
korur. 2010
olmalıdır.
Yapmaya çalıştığım şeyi nasıl yaparım? Boost'u veya başka bir 3. parti kitaplığını kullanamam, C++ 0x kullanamaz.
* Bill 1 –
'setw ... "Standart C++ IOstreams ve Yerel Ayarlar" onun kopyası için sabırsızlanıyorum() 'çıktı yazmak içindir. Okumak için işe yaramıyor. – marcog
Belki de ilk alanı çıkarmadan önce akışının başına dönmelisiniz. –