1
0
Fork 0
SDEV-340-81/week-13/pc1.cpp

75 lines
2.7 KiB
C++

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Champlain College SDEV-340-81
*
* C++ Week 13: Assignment (second semester) - Starting out with C++ Early Objects (9 Edition) (2020/08/08)
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Stacks & Queues - Chapter 18 (Page 1123)
* Programming Challenge (9. File Reverser)
* Using a stack data type, reverse the content of a file
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Written by Llewellyn van der Merwe <llewellyn.vandermerw@mymail.champlain.edu>, Aug 2020
* Copyright (C) 2020. All Rights Reserved
* License GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <iostream>
#include <fstream>
#include <string>
#include <stack>
// Function Declarations
void readCharFileToStack(std::string &filePath, std::stack<char> &fileContent);
void writeStackToFile(std::string &filePath, std::stack<char> &fileContent);
int main() {
// My test file is one directory up, from the executable
// Please set the file paths to your test files here
std::string filePathIn = "../test_file";
std::string filePathOut = "../test_file_out";
// initialize the stack content bucket;
std::stack<char> fileContent;
// now get the file "in" content
readCharFileToStack(filePathIn, fileContent);
// now lets push the characters to a new file "out"
writeStackToFile(filePathOut, fileContent);
return 0;
}
// Adapted this from https://stackoverflow.com/a/40930254/1429677
// To read the characters from a file one by one
void readCharFileToStack(std::string &filePath, std::stack<char> &fileContent) {
std::ifstream file(filePath);
char c;
if(file.is_open()) {
while(!file.eof()) {
file.get(c);
if ((!file.eof())) {
// set the character to the stack
fileContent.push(c);
}
}
}
if(!file.eof() && file.fail())
std::cout << "error reading " << filePath << std::endl;
file.close();
}
// To write characters to a file one at a time
void writeStackToFile(std::string &filePath, std::stack<char> &fileContent) {
std::fstream file(filePath, std::ios::trunc | std::ios::out);
if(file.is_open()) {
do {
file << fileContent.top();
fileContent.pop();
} while(!fileContent.empty());
}
if(!file.eof() && file.fail())
std::cout << "error writing to " << filePath << std::endl;
file.close();
}