Advertisement
MadCortez

Untitled

Nov 25th, 2021
865
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.87 KB | None | 0 0
  1. #include <iostream>
  2. #include <set>
  3. #include <vector>
  4. #include <string>
  5. #include <string.h>
  6.  
  7. using namespace std;
  8.  
  9. #define pb push_back
  10. #define mp make_pair
  11.  
  12. const string correctStart = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM_йцукенгшщзхъфывапролджэячсмитьбюёЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЁ";
  13. const string correctSymb = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM_йцукенгшщзхъфывапролджэячсмитьбюёЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЁ1234567890";
  14. vector<vector<int>> state =
  15. { { 0, 0, 1, 0, 0},
  16.   {0, 0, 0, 2 ,0},
  17.   {0, 0, 0, 2 ,0},
  18.   {0, 0, 0, 2 ,0},
  19.   {0, 0, 0, 2 ,0},
  20.   {0, 0, 0, 2 ,0}
  21. };
  22.  
  23. bool checkFirstSymb(string s) {
  24.     for (int i = 0; i < correctStart.size(); i++)
  25.         if (s[0] == correctStart[i])
  26.             return true;
  27.     return false;
  28. }
  29.  
  30. bool checkFullString(string s) {
  31.     for (int i = 1; i < s.size(); i++) {
  32.         bool isCorrect = false;
  33.         for (int j = 0; j < correctSymb.size() && !isCorrect; j++)
  34.             if (s[i] == correctSymb[j])
  35.                 isCorrect = true;
  36.         if (!isCorrect)
  37.             return false;
  38.     }
  39.     return true;
  40. }
  41.  
  42. void printAns(vector<string> a, set<string> b) {
  43.     string notFound = "No correct substrings found";
  44.     cout << "Found all correct substrings: \n";
  45.     if (a.size() > 0)
  46.         for (int i = 0; i < a.size(); i++)
  47.             cout << a[i] << ' ';
  48.     else
  49.         cout << notFound;
  50.     cout << "\nFound unique correct substrings: \n";
  51.     set<string> ::iterator it;
  52.     if (b.size() > 0)
  53.         for (it = b.begin(); it != b.end(); ++it)
  54.             cout << *it << " ";
  55.     else
  56.         cout << notFound;
  57. }
  58.  
  59. pair<vector<string>, set<string>> findSubstrings(string s) {
  60.     vector<string> ansFull;
  61.     set<string> ansUnique;
  62.     bool isFind = false;
  63.     string toPush;
  64.     for (int i = 0; i < s.size(); i++) {
  65.         isFind = false;
  66.         for (int j = 0; j < correctStart.size(); j++)
  67.             if (s[i] == correctStart[j]) {
  68.                 isFind = true;
  69.                 toPush = "";
  70.                 for (int c = i; c < s.size() && isFind; c++) {
  71.                     isFind = false;
  72.                     for (int k = 0; k < correctSymb.size() && !isFind; k++)
  73.                         if (s[c] == correctSymb[k])
  74.                             isFind = true;
  75.                     if (isFind) {
  76.                         toPush += s[c];
  77.                         ansFull.pb(toPush);
  78.                         if (ansUnique.find(toPush) == ansUnique.end())
  79.                             ansUnique.insert(toPush);
  80.                     }
  81.                 }
  82.             }
  83.     }
  84.     return mp(ansFull, ansUnique);
  85. }
  86.  
  87. void checkStringForCorrect(string s) {
  88.     if (checkFirstSymb(s))
  89.         if (checkFullString(s))
  90.             cout << "True\n";
  91.         else
  92.             cout << "False\n";
  93.     else
  94.         cout << "False\n";
  95. }
  96.  
  97. int main(int argc, char* argv[]) {
  98.     setlocale(LC_ALL, "Russian");
  99.     string input;
  100.     cout << "Enter your string:\n";
  101.     getline(cin, input);
  102.     cout << "The result of checking the correctness of the entered string: ";
  103.     checkStringForCorrect(input);
  104.     pair<vector<string>, set<string>> ans = findSubstrings(input);
  105.     printAns(ans.first, ans.second);
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement