Advertisement
SkeptaProgrammer

Untitled

Nov 6th, 2019
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.47 KB | None | 0 0
  1. // syrykh_4.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
  2. // split
  3.  
  4. #include "pch.h"
  5. #include <fstream>
  6. #include <iostream>
  7. #include <string>
  8. #include <sstream>
  9. using namespace std;
  10.  
  11. bool operationMark(string str) // тут думаю понятно
  12. {
  13.     return (str == ">=" || str == "<=" || str == "==" || str == "<" || str == ">" || str == "!=");
  14. }
  15.  
  16. int WordsCount(string str) // я пока что не могу вспомнить нахуя оно нужно
  17. {
  18.     int result = 0;
  19.     istringstream streamStr(str);
  20.     string lastWord = " ", word = "";
  21.     while (lastWord != word)
  22.     {
  23.         lastWord = word;
  24.         streamStr >> word;if(lastWord != word) result++;
  25.     }
  26.     return result;
  27. }
  28.  
  29. bool checkVariableIdentifcator(string str) //функция проверяет является ли найденное слово переменной,либо числовой константой
  30. {
  31.     ifstream resFile;
  32.     resFile.open("C:\\onlyformydoggers\\more than words.txt");
  33.  
  34.     string tempStr="";
  35.     bool checkConst = true, isVar = true;
  36.     if (str[0] >= 48 && str[0] <= 57)
  37.     {
  38.         for (int i = 0; i < str.length() && checkConst; i++)
  39.             if (!(str[i] <= 57 && str[i] >= 48)) checkConst = false;
  40.         if (checkConst) return true;
  41.         else return false;
  42.     }
  43.  
  44.     while (!resFile.eof()&& isVar)
  45.     {
  46.             resFile >> tempStr;
  47.             if (str == tempStr) isVar = false;
  48.     }
  49.     for (int i = 0; i < str.length()&& isVar; i++)
  50.         if (str[i] >= 58 && str[i] <= 64 || str[i] >= 0 && str[i] <= 47 || str[i] >= 91 && str[i] < 95 || str[i] == 96 || str[i] >= 123) isVar = false;
  51.    
  52.     resFile.close();
  53.     return isVar;
  54. }
  55.  
  56.  
  57. enum states {START, IDENTIFICATOR,SPECIAL_IDENTIFICATOR, OPERATION_MARK, SUCCESS, SKIP, SPECIAL_OPERATION_MARK}; // SPECIAL_OPERATION_MARK -- для особого случая когда нужно работать с разными строками
  58.  
  59. int main()
  60. {
  61.     ifstream resourceFile,workFile;
  62.     int wordsCount = 0; //char s[256];
  63.     string str = "", resultString = "", word = "", specialString = "", s=""; /* specialString -- строка для случая, когда операция сравнения "разнесена в пространстве":
  64.                                                                      if ( a >
  65.                                                                      b )*/
  66.     getline(cin, s);
  67.     workFile.open(s);
  68.     //cout << workFile.is_open();
  69.     states state = START;
  70.     while (!workFile.eof())
  71.     {
  72.         getline(workFile, str);
  73.         istringstream streamStr(str);
  74.         int i = 0, k = 0;
  75.         wordsCount = WordsCount(str);
  76.         string *arrayWords = new string[wordsCount];
  77.         while (i < wordsCount)
  78.         {
  79.             streamStr >> word;
  80.             arrayWords[i] = word;
  81.             i++;
  82.         }
  83.             while(k < wordsCount)
  84.             {
  85.                 switch (state)
  86.                 {
  87.                 case START:
  88.                 {
  89.                     if (k == wordsCount - 1 && checkVariableIdentifcator(arrayWords[k]))
  90.                     {
  91.                         state = SPECIAL_OPERATION_MARK;
  92.                         specialString += arrayWords[k] + " ";
  93.                         k++;
  94.                     }
  95.                     else if (checkVariableIdentifcator(arrayWords[k]) && k < wordsCount-1)
  96.                     {
  97.                         state = OPERATION_MARK;
  98.                         resultString += arrayWords[k] + " ";
  99.                         k++;
  100.                     }
  101.                     else state = SKIP;
  102.                     break;
  103.                 }
  104.                 case SPECIAL_OPERATION_MARK:
  105.                 {
  106.                     if (operationMark(arrayWords[k]) && k < wordsCount)
  107.                     {
  108.                         state = SPECIAL_IDENTIFICATOR;
  109.                         specialString += arrayWords[k] + " ";
  110.                         k++;
  111.                     }
  112.                     else
  113.                     {
  114.                         state = START;
  115.                         specialString = "";
  116.                     }
  117.                         break;
  118.                 }
  119.                 case SPECIAL_IDENTIFICATOR:
  120.                 {
  121.                     if (checkVariableIdentifcator(arrayWords[k]) && k < wordsCount)
  122.                     {
  123.                         state = SUCCESS;
  124.                         specialString += arrayWords[k];
  125.                         resultString += specialString;
  126.                         specialString = "";
  127.                     }
  128.                     else state = SKIP;
  129.                     break;
  130.                 }
  131.                 case IDENTIFICATOR:
  132.                 {
  133.                     if (checkVariableIdentifcator(arrayWords[k]) && k < wordsCount)
  134.                     {
  135.                         state = SUCCESS;
  136.                         resultString += arrayWords[k];
  137.                     }
  138.                     else state = SKIP;
  139.                     break;
  140.                 }
  141.                
  142.                 case OPERATION_MARK:
  143.                 {
  144.                     if (operationMark(arrayWords[k]) && k < wordsCount)
  145.                     {
  146.                         state = IDENTIFICATOR;
  147.                         resultString += arrayWords[k] + " ";
  148.                         k++;
  149.                     }
  150.                     else state = SKIP;
  151.                     break;
  152.                 }
  153.                 case SKIP:
  154.                 {
  155.                     resultString = "";
  156.                     k++;
  157.                     state = START;
  158.                     break;
  159.                 }
  160.                 case SUCCESS:
  161.                 {
  162.                     cout << resultString<< "\n";
  163.                     state = SKIP;
  164.                     break;
  165.                 }
  166.                 }
  167.             }
  168.             delete[] arrayWords;
  169.     }
  170.     workFile.close();
  171.     return 0;
  172. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement