vadim_sharaf

Untitled

Feb 13th, 2023
756
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.35 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include<iomanip>
  4. using namespace std;
  5. const unsigned N = 100;
  6. struct strM {
  7.     char S[N + 1];
  8.     char mark; // маркер
  9.     char sb; //заданный символ
  10.     unsigned count = 0;
  11. };
  12.  
  13. struct workWithFile {
  14.     bool fill; // проверка на корректность файла
  15.     char st; // тип ошибки для входного файла
  16.     char c; // ограничивающий символ
  17.     char s1; // заглушка
  18.     char s; //
  19.     bool flag;
  20. };
  21. void inStrM(workWithFile &a1, strM &a, fstream& outFile) {
  22.     fstream inFile;
  23.     inFile.open("in.txt", ios::in);
  24.     if (inFile.is_open()) {
  25.         /*char c; char s1; char s;*/ unsigned counter = 0;
  26.         inFile >> a.sb;
  27.         if (inFile.eof()) {
  28.             a1.fill = false;
  29.             a1.st = 'e';
  30.         }
  31.         inFile >> a.mark;
  32.         if (inFile.eof()) {
  33.             a1.fill = false;
  34.             a1.st = 'e';
  35.         }
  36.         if (a.sb == a.mark) {
  37.             a1.fill = false;
  38.             a1.st = 'i';
  39.         }
  40.         inFile >> a1.c;
  41.         if (a1.c == a.mark) {
  42.             a1.fill = false;
  43.             a1.st = 'i';
  44.         }
  45.         if (inFile.eof()) {
  46.             a1.fill = false;
  47.             a1.st = 'e';
  48.         }
  49.         inFile >> a1.s1;
  50.         //cout << a1.s1 << endl;
  51.         if (a1.s1 == a1.c) {
  52.             a1.fill = false;
  53.             a1.st = 'e';
  54.         }
  55.         if (inFile.eof()) {
  56.             a1.fill = false;
  57.             a1.st = 'e';
  58.         }
  59.         if (a1.fill != false) {
  60.             inFile.seekg(-1, ios::cur);
  61.             inFile << resetiosflags(ios::skipws);
  62.             do {
  63.                 if (counter >= N) {
  64.                     break;
  65.                     cout << "Размер массива меньше количества символов";
  66.                 }
  67.                 inFile >> a1.s;
  68.                 if (a1.s == '\n') a1.s = ' ';
  69.                 a.S[counter] = a1.s;
  70.                 counter++;
  71.             } while (a1.s != a1.c);
  72.             a.S[counter-1] = a.mark;
  73.         }
  74.        
  75.     }
  76.     else {
  77.         cout << "Ошибка: файл не открылся.\n";
  78.         outFile << "Ошибка: файл не открылся.\n";
  79.     }
  80.     inFile.close();
  81. }
  82. void outError(workWithFile& a1, fstream& outFile) {
  83.     if (a1.st == 'e') {
  84.         cout << "Ошибка: файл пустой\n";
  85.         outFile << "Ошибка: файл пустой\n";
  86.     }
  87.     else if (a1.st == 'i') {
  88.         cout << "Ошибка: введенные данные некорректны\n";
  89.         outFile << "Ошибка: введенные данные некорректны\n";
  90.     }
  91. }
  92. void process(strM& a, workWithFile& a1, fstream& logFile, fstream& outFile) {
  93.     unsigned i = 0;
  94.     logFile << "Слова, начинающиеся с символа " << a.sb << ": ";
  95.     outFile << "Прочитанная строка: ";
  96.     a1.flag = false;
  97.     a.count = 0;
  98.     while (a.S[i] != a.mark) {
  99.         outFile << a.S[i];
  100.         if ((i == 0 or a.S[i - 1] == ' ') && (a.S[i] == a.sb)) {
  101.             a.count += 1;
  102.             a1.flag = true;
  103.             logFile << a.S[i];
  104.         }
  105.         else if (a1.flag == true) {
  106.             if (a.S[i] == ' ') a1.flag = false;
  107.             logFile << a.S[i];
  108.         }
  109.         i++;
  110.     }
  111.     outFile << '\n';
  112. }
  113. void outStrM(strM& a, fstream& outFile) {
  114.     outFile << "Количество слов, начинающихся с символа " << a.sb << " : " << a.count << "\n";
  115.  
  116. }
  117. int main() {
  118.     setlocale(LC_ALL, "RUS");
  119.     fstream outFile;
  120.     fstream logFile;
  121.     logFile.open("log.txt", ios::out);
  122.     outFile.open("out.txt", ios::out);
  123.     workWithFile a1;
  124.     strM a;
  125.     inStrM(a1, a, outFile);
  126.     //cout << a.S[0] << endl;
  127.     if (a1.fill) {
  128.         process(a, a1, logFile, outFile);
  129.         outStrM(a, outFile);
  130.     }
  131.     else {
  132.         outError(a1, outFile);
  133.     }
  134.     logFile.close();
  135.     outFile.close();
  136.     return 0;
  137. }
Advertisement
Add Comment
Please, Sign In to add comment