Skip to content

Instantly share code, notes, and snippets.

@Poplava
Last active August 29, 2015 14:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Poplava/7fffdce8dfd6da1d7462 to your computer and use it in GitHub Desktop.
Save Poplava/7fffdce8dfd6da1d7462 to your computer and use it in GitHub Desktop.
/*
Дан текстовый файл f.
Слова в файле разделены одним или группой пробелов.
Удалить из файла все однобуквенные слова и лишние пробелы.
Результат записать в файл g.
*/
#include <iostream>
#include <fstream>
#include <string>
#include <regex>
using namespace std;
void readFileText(ifstream &f, char fileName[20]);
void writeFileText(ofstream &f, char fileName[20]);
void reformatFileText(ifstream &iFile, ofstream &oFile, char sourceFileName[20], char resultFileName[20]);
int n;
int main()
{
char sourceFileName[20], resultFileName[20], action;
ifstream iFile;
ofstream oFile;
cout << "Please enter surce file name: ";
cin >> sourceFileName;
cout << "Please enter result file name: ";
cin >> resultFileName;
restartMark:
cout << "Read source (r). Write source (w). Reformat (c). Read result (d). Exit (e). ? ";
cin >> action;
switch (action) {
case 'r':
case 'R':
readFileText(iFile, sourceFileName);
break;
case 'w':
case 'W':
writeFileText(oFile, sourceFileName);
break;
case 'c':
case 'C':
reformatFileText(iFile, oFile, sourceFileName, resultFileName);
break;
case 'd':
case 'D':
readFileText(iFile, resultFileName);
break;
default:
return 0;
}
goto restartMark;
return 0;
}
void readFileText(ifstream &f, char fileName[20])
{
string line;
cout << "Reading file \"" << fileName << "\":" << endl;
f.open(fileName);
if (f.is_open()) {
while (getline(f, line)) {
cout << line << endl;
}
f.close();
}
else {
cout << "An error ocured while reading file." << endl;
}
}
void writeFileText(ofstream &f, char fileName[20])
{
string line;
int compareLineFlag;
cout << "Writing file \"" << fileName << "\" (type \"done\" to finish):" << endl;
cin.ignore();
f.open(fileName);
if (f.is_open()) {
do {
getline(cin, line);
compareLineFlag = line.compare("done");
if (compareLineFlag) {
f << line << endl;
}
} while (compareLineFlag);
f.close();
cout << "File \"" << fileName << "\" successfully writed." << endl;
}
else {
cout << "An error ocured while writing file." << endl;
}
}
void reformatFileText(ifstream &iFile, ofstream &oFile, char sourceFileName[20], char resultFileName[20])
{
string line;
regex a("[ ]{2,}"), b("\\b[^ ] ");
cout << "Reading file \"" << sourceFileName << "\":" << endl;
cin.ignore();
iFile.open(sourceFileName, ios::binary | ios::in);
oFile.open(resultFileName, ios::binary | ios::out);
if (iFile.is_open() && oFile.is_open()) {
while (getline(iFile, line)) {
line = regex_replace(line, a, " ");
line += ' ';
line = regex_replace(line, b, "");
line = line.substr(0, line.size() - 1);
oFile << line << endl;
}
iFile.close();
oFile.close();
cout << "File \"" << resultFileName << "\" successfully writed." << endl;
}
else {
cout << "An error ocured while opening file." << endl;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment