Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <iomanip>
- #include <ctype.h >
- using namespace std;
- const unsigned N = 18;
- struct strM {
- char S[N + 1];
- char mark;
- char sb;
- unsigned count = 0;
- };
- struct workWithFile {
- bool fill;
- char st;
- int num;
- char s1;
- char s;
- bool flag;
- };
- void inStrM(workWithFile& a1, strM& a, fstream& outFile) {
- fstream inFile;
- inFile.open("in.txt", ios::in);
- if (inFile.is_open()) {
- /*char c; char s1; char s;*/ unsigned counter = 0;
- inFile >> a.sb;
- if (inFile.eof()) {
- a1.fill = false;
- a1.st = 'e';
- }
- inFile >> a.mark;
- if (inFile.eof()) {
- a1.fill = false;
- a1.st = 'e';
- }
- if (a.sb == a.mark) {
- a1.fill = false;
- a1.st = 'i';
- }
- inFile >> a1.num;
- if (a1.num == 0 or a1.num < 0) {
- a1.fill = false;
- a1.st = 'i';
- }
- if (inFile.eof()) {
- a1.fill = false;
- a1.st = 'e';
- }
- inFile >> a1.s1;
- //cout << a1.s1 << endl;
- if (inFile.eof()) {
- a1.fill = false;
- a1.st = 'e';
- }
- if (a1.fill != false) {
- inFile.seekg(-1, ios::cur);
- inFile << resetiosflags(ios::skipws);
- do {
- if (counter >= N) {
- break;
- cout << "Размер массива меньше количества символов";
- }
- inFile >> a1.s;
- if (a1.s == '\n') a1.s = ' ';
- a.S[counter] = a1.s;
- counter++;
- } while (counter < a1.num);
- a.S[counter] = a.mark;
- }
- }
- else {
- cout << "Ошибка: файл не открылся.\n";
- outFile << "Ошибка: файл не открылся.\n";
- }
- inFile.close();
- }
- void outError(workWithFile& a1, fstream& outFile) {
- if (a1.st == 'e') {
- cout << "Ошибка: файл пустой\n";
- outFile << "Ошибка: файл пустой\n";
- }
- else if (a1.st == 'i') {
- cout << "Ошибка: введенные данные некорректны\n";
- outFile << "Ошибка: введенные данные некорректны\n";
- }
- }
- void process(strM& a, workWithFile& a1, fstream& logFile, fstream& outFile) {
- unsigned i = 0;
- logFile << "Слова, начинающиеся с символа " << a.sb << ": ";
- outFile << "Прочитанная строка: ";
- a1.flag = false;
- a.count = 0;
- while (a.S[i] != a.mark) {
- outFile << a.S[i];
- if ((i == 0 or a.S[i - 1] == ' ') && (a.S[i] == a.sb)) {
- a.count += 1;
- a1.flag = true;
- logFile << a.S[i];
- }
- else if (a1.flag == true) {
- if (a.S[i] == ' ') a1.flag = false;
- logFile << a.S[i];
- }
- i++;
- }
- outFile << '\n';
- }
- void outStrM(strM& a, fstream& outFile) {
- outFile << "Количество слов, начинающихся с символа " << a.sb << " : " << a.count << "\n";
- }
- int main() {
- setlocale(LC_ALL, "RUS");
- fstream outFile;
- fstream logFile;
- logFile.open("log.txt", ios::out);
- outFile.open("out.txt", ios::out);
- workWithFile a1;
- strM a;
- inStrM(a1, a, outFile);
- //cout << a.S[0] << endl;
- if (a1.fill) {
- process(a, a1, logFile, outFile);
- outStrM(a, outFile);
- }
- else {
- outError(a1, outFile);
- }
- logFile.close();
- outFile.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement