Здравствуйте, falcon8, Вы писали:
F>если было хоть какое-нибудь разделение вопроса не было б
есть только размер и набор символьных строк
Строк в "общечеловеческом" понимании, но не в сишном.
Тебе что, сложно превратить массив символов в строку? Ай, как нефиг делать!
// 1234556909809.01.444443356784532
// \___________/ \/ \_____________/
// a b c
#pragma pack(push,1)
struct FileRecord // только для чтения-записи в файл
{
char a[13], dummy1, b[2], dummy2, c[15];
};
#pragma pack(pop)
// немножко по мотивам буста
template<class T, int N> T* begin(T(&arr)[N]) { return arr+0; }
template<class T, int N> T* end (T(&arr)[N]) { return arr+N; }
template<class I, class J, class T> void copy_and_fill(I i, I ie, J j, J je, T v)
{
for( ; i!=ie && j!=je; ++i, ++j)
*je = *ie;
for( ; j!=je; ++j)
*j = v;
}
struct Record // для работы
{
std::string a, b, c;
Record(const FileRecord& src)
: a(begin(src.a), end(src.a))
, b(begin(src.b), end(src.b))
, c(begin(src.c), end(src.c))
{}
void export(FileRecord& dst) const
{
copy_and_fill(a.begin(), a.end(), begin(dst.a), end(dst.a), ' ');
dst.dummy1 = '.';
copy_and_fill(b.begin(), b.end(), begin(dst.b), end(dst.b), ' ');
dst.dummy2 = '.';
copy_and_fill(c.begin(), c.end(), begin(dst.c), end(dst.c), ' ');
}
};
inline std::ostream& operator << (std::ostream& ost, Record const& rec)
{
ost << "{ ";
ost << "\"" << rec.a << "\"" << ", ";
ost << "\"" << rec.b << "\"" << ", ";
ost << "\"" << rec.c << "\"";
ost << " }";
return ost;
}
... << RSDN@Home 1.2.0 alpha rev. 655>>