а здесь класс Record можно вот представить:
Код:
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <algorithm>
typedef std::string word;
/***************************************************************************/
class Record {
/* Массив слов */
std::vector<std::string> words;
public:
/* Конструкторы */
Record():words() {}
Record(const std::string& b):words() { load(b); }
/* Деструктор */
~Record() {}
/* Загружает слова из строки */
void load(const std::string& b) {
std::istringstream buf(b);
word word;
while ( buf.rdbuf()->in_avail() ) {
buf >> word;
words.push_back(word);
}
}
/* Сохраняет слова в строку */
void save(std::string& b) {
std::ostringstream buf;
std::vector<std::string>::iterator it = words.begin();
while ( it != words.end() ) {
buf << *it << (it == words.end()) ? "" : " ";
++it;
}
b = buf.str();
}
/* Добавляет одно слово */
void add(const word& w) {
if ( w.empty() ) return;
words.push_back(w);
}
/* Проверка на присутствие слова 'w' в массиве */
bool contains(const word& w) const {
return std::count(words.begin(), words.end(), w) > 0;
}
};
/***************************************************************************/
/* Информация о записи */
struct RecordInfo {
RecordInfo():cassete_num(0),record_num(0){}
int cassete_num;
int record_num;
};
/***************************************************************************/
/* Из строки прочитанной из файла записей, извлекает информацию о записи */
RecordInfo get_record_info( const std::string& s ) {
RecordInfo recinfo;
std::string casnum;
std::string recnum;
std::string::const_iterator it1 = std::find(s.begin(), s.end(), ':');
casnum.resize(it1-s.begin());
std::copy(s.begin(), it1, casnum.begin());
it1++;
std::string::const_iterator it2 = std::find(it1, s.end(), ':');
recnum.resize(it2-it1);
std::copy(it1, it2, recnum.begin());
recinfo.cassete_num = atoi(casnum.c_str());
recinfo.record_num = atoi(recnum.c_str());
return recinfo;
}
/***************************************************************************/
/* Удаляет из строки информацию о записи */
std::string trim_info(const std::string& s) {
std::string result;
std::string::const_iterator it1 = std::find(s.begin(), s.end(), ':')+1;
std::string::const_iterator it2 = std::find(it1, s.end(), ':')+1;
result.resize(s.end()-it2);
std::copy(it2, s.end(), result.begin());
return result;
}
/***************************************************************************/
int main(int argc, char** argv) {
RecordInfo recinfo;
/* Открываем файл записей для чтения из него */
std::fstream in("records.txt", std::ios::in);
if ( !in ) {
std::cout << "Can`t open records file. Terminate!\n";
return 1;
}
/* Читаем построчно поку не конец файла */
while ( !in.eof() ) {
/* Временные объекты. (пока что...) */
Record rec;
std::string str;
/* Читаем строку */
std::getline(in, str);
/* Извлекаем из нее информацию о записи */
recinfo = get_record_info(str);
/* Выводим информацию о записи. (для отладки...) */
std::cout<< "Record info - cas:" << recinfo.cassete_num
<< " rec:" << recinfo.record_num << std::endl;
/* Удаляем из строки информацию о записи */
str = trim_info(str);
/* Загружаем запись в объект 'Record' */
rec.load(str);
}
return 0;
}
/***************************************************************************/