1. Пользуйтесь тегами кода. - [code] ... [/code] 2. Точно указывайте язык, название и версию компилятора (интерпретатора). 3. Название темы должно быть информативным. В описании темы указываем язык!!!
Доброго времени суток всем! Особенно volvo, потому что он он один разбирается во всем бреде, что я пищу) В общем я опять пришёл за помощью. Программа, которую я пытаюсь написать, должна считывать из файлов строки.разбивать строки на предложения и для каждого из файлов найти 5 самых длинных предложений. Ну там ещё надо учитывать что бы время обработки было не менее 0.2с и пр. Но сейчас суть не в этом. Вот исходники : main.cpp :
/*FUNCTIONS PROTOTYPE GOES HERE*/ void GetFileList(char *argv[], std::vector<std::string>& vect);// Получает список файлов по заданной маске
std::string GetStringsFromFile(std::vector<std::string>& Paths, unsigned int &i);//получает ЦЕЛЫЕ строки из файлов
std::string Parser(std::string & s, char& devider);//разделяет большую строку на маленькие ,путем поиска делителя devider
unsigned int GetDividerCount(std::string &s, char& devider);//Возвращает кол-во разделителей в общей строке
bool comp(std::string s1, std::string s2); // предикат для сортировки вектора
void SaveResults(std::string fname, std::vector<std::string> &PS, unsigned int &filecount, std::size_t &parsedst, std::vector<std::string> &Paths);//Сохраняет результаты выполнения программы
unsigned int GetDividerCount(std::string &s, char& devider) { int count = 0; for (unsigned int i = 0; i < s.size(); i++) if (s.at(i) == devider) count++; return count; }
std::string Parser(std::string &s, char& devider) { std::string bufs; int n = s.find('.'); bufs.append(s, 0, n); s.erase(0, n + 1); return bufs; }
ofstream outfile(fname.data()); outfile.seekp(0, std::ios_base::end); // outfile << "\nNumber of files parsed : " << filecount; // outfile << "\nParsed files : \n"; // for (unsigned int i = 0; i < filecount; i++) // outfile << i + 1 << " - " << Paths[i] << "\n"; for (unsigned int i = 0; i < filecount; i++) { outfile << "Five longest strings for file " << Paths[i] << " : \n"; for (unsigned int i = 0; i < 5; i++) outfile << i + 1 << " - " << PS[i] << "\n"; } outfile << "\nTotal count of parsed strings for this file : " << parsedst; outfile.close(); }
Суть проблемы : Почему-то в файла результатов записывается информация только о последнем файле. Почему - я так и не понял. Попробовал делать промежуточные выводы - вектор PS шалит, полностью не заполняется предложениями. Почему - тоже не понял. Наверное тупой или устал.. Если кто-то будет запускать приложение, вот параметры запуска : имяфайла.exe путькфайлу(например C:\1) кол-во файлов к обработке (например 3). Я пока не стал делать перехваты ошибок при запуске, не до этого...хочу сначала с этим разобраться. И ещё кое-что, в приложенном файле примеры файлов для обработки, 3 текстовых файла.