Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // syrykh_4.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
- // split
- #include "pch.h"
- #include <fstream>
- #include <iostream>
- #include <string>
- #include <sstream>
- using namespace std;
- bool operationMark(string str) // тут думаю понятно
- {
- return (str == ">=" || str == "<=" || str == "==" || str == "<" || str == ">" || str == "!=");
- }
- int WordsCount(string str) // я пока что не могу вспомнить нахуя оно нужно
- {
- int result = 0;
- istringstream streamStr(str);
- string lastWord = " ", word = "";
- while (lastWord != word)
- {
- lastWord = word;
- streamStr >> word;if(lastWord != word) result++;
- }
- return result;
- }
- bool checkVariableIdentifcator(string str) //функция проверяет является ли найденное слово переменной,либо числовой константой
- {
- ifstream resFile;
- resFile.open("C:\\onlyformydoggers\\more than words.txt");
- string tempStr="";
- bool checkConst = true, isVar = true;
- if (str[0] >= 48 && str[0] <= 57)
- {
- for (int i = 0; i < str.length() && checkConst; i++)
- if (!(str[i] <= 57 && str[i] >= 48)) checkConst = false;
- if (checkConst) return true;
- else return false;
- }
- while (!resFile.eof()&& isVar)
- {
- resFile >> tempStr;
- if (str == tempStr) isVar = false;
- }
- for (int i = 0; i < str.length()&& isVar; i++)
- 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;
- resFile.close();
- return isVar;
- }
- enum states {START, IDENTIFICATOR,SPECIAL_IDENTIFICATOR, OPERATION_MARK, SUCCESS, SKIP, SPECIAL_OPERATION_MARK}; // SPECIAL_OPERATION_MARK -- для особого случая когда нужно работать с разными строками
- int main()
- {
- ifstream resourceFile,workFile;
- int wordsCount = 0; //char s[256];
- string str = "", resultString = "", word = "", specialString = "", s=""; /* specialString -- строка для случая, когда операция сравнения "разнесена в пространстве":
- if ( a >
- b )*/
- getline(cin, s);
- workFile.open(s);
- //cout << workFile.is_open();
- states state = START;
- while (!workFile.eof())
- {
- getline(workFile, str);
- istringstream streamStr(str);
- int i = 0, k = 0;
- wordsCount = WordsCount(str);
- string *arrayWords = new string[wordsCount];
- while (i < wordsCount)
- {
- streamStr >> word;
- arrayWords[i] = word;
- i++;
- }
- while(k < wordsCount)
- {
- switch (state)
- {
- case START:
- {
- if (k == wordsCount - 1 && checkVariableIdentifcator(arrayWords[k]))
- {
- state = SPECIAL_OPERATION_MARK;
- specialString += arrayWords[k] + " ";
- k++;
- }
- else if (checkVariableIdentifcator(arrayWords[k]) && k < wordsCount-1)
- {
- state = OPERATION_MARK;
- resultString += arrayWords[k] + " ";
- k++;
- }
- else state = SKIP;
- break;
- }
- case SPECIAL_OPERATION_MARK:
- {
- if (operationMark(arrayWords[k]) && k < wordsCount)
- {
- state = SPECIAL_IDENTIFICATOR;
- specialString += arrayWords[k] + " ";
- k++;
- }
- else
- {
- state = START;
- specialString = "";
- }
- break;
- }
- case SPECIAL_IDENTIFICATOR:
- {
- if (checkVariableIdentifcator(arrayWords[k]) && k < wordsCount)
- {
- state = SUCCESS;
- specialString += arrayWords[k];
- resultString += specialString;
- specialString = "";
- }
- else state = SKIP;
- break;
- }
- case IDENTIFICATOR:
- {
- if (checkVariableIdentifcator(arrayWords[k]) && k < wordsCount)
- {
- state = SUCCESS;
- resultString += arrayWords[k];
- }
- else state = SKIP;
- break;
- }
- case OPERATION_MARK:
- {
- if (operationMark(arrayWords[k]) && k < wordsCount)
- {
- state = IDENTIFICATOR;
- resultString += arrayWords[k] + " ";
- k++;
- }
- else state = SKIP;
- break;
- }
- case SKIP:
- {
- resultString = "";
- k++;
- state = START;
- break;
- }
- case SUCCESS:
- {
- cout << resultString<< "\n";
- state = SKIP;
- break;
- }
- }
- }
- delete[] arrayWords;
- }
- workFile.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement