diff options
| author | Syndamia <kamen@syndamia.com> | 2024-04-03 17:47:07 +0300 |
|---|---|---|
| committer | Syndamia <kamen@syndamia.com> | 2024-04-03 17:47:07 +0300 |
| commit | 44d085f265583f0e3cbef294bbe2c8e300aaa452 (patch) | |
| tree | 4899165f82a51beca1d4726db441a2749b628b9f /week06/Exercise04.cpp | |
| parent | 6a8154ad7f2cbfbb2ae4f2ddda1cd0db0e430e44 (diff) | |
| download | oop-2023-solutions-44d085f265583f0e3cbef294bbe2c8e300aaa452.tar oop-2023-solutions-44d085f265583f0e3cbef294bbe2c8e300aaa452.tar.gz oop-2023-solutions-44d085f265583f0e3cbef294bbe2c8e300aaa452.zip | |
[w6] Added exercise descriptions and solutions to 1-9
Diffstat (limited to 'week06/Exercise04.cpp')
| -rw-r--r-- | week06/Exercise04.cpp | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/week06/Exercise04.cpp b/week06/Exercise04.cpp new file mode 100644 index 0000000..95aa007 --- /dev/null +++ b/week06/Exercise04.cpp @@ -0,0 +1,69 @@ +#include <fstream> +#include <iostream> + +// Отивайки в края и тръгвайки към началото +void Method1(std::ifstream& file) { + file.seekg(0, std::ios::end); + size_t endPos = file.tellg(); + + while (!file.fail() && file.peek() != '\n') { + file.seekg(-1, std::ios::cur); + } + file.clear(); + + if (file.tellg() > 0) { + file.seekg(1, std::ios::cur); + } + size_t lineLength = endPos - file.tellg() + 1; + + char* buffer = new char[lineLength + 1]; + file.getline(buffer, lineLength); + buffer[lineLength] = '\0'; + + std::cout << buffer << std::endl; + + delete[] buffer; +} + +// Започвайки от началото и ходейки към края +void Method2(std::ifstream& file) { + file.seekg(0, std::ios::end); + size_t lastIndex = file.tellg(); + + file.seekg(0, std::ios::beg); + size_t lastNewLine = 0; + + while (!file.eof()) { + if (file.get() == '\n') { + lastNewLine = file.tellg(); + } + } + file.clear(); + + file.seekg(lastNewLine, std::ios::beg); + size_t lineLength = lastIndex - file.tellg() + 1; + + char* buffer = new char[lineLength + 1]; + file.getline(buffer, lineLength); + buffer[lineLength] = '\0'; + + std::cout << buffer << std::endl; + + delete[] buffer; +} + +int main() { + char fileName[1024]; + std::cin.getline(fileName, 1024); + + std::ifstream file(fileName); + if (!file.is_open()) { + std::cout << "Couldn't open file!" << std::endl; + return 1; + } + + Method1(file); + Method2(file); + + file.close(); +} |
