Advertisement
Guest User

Untitled

a guest
May 28th, 2015
246
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.64 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <sstream>
  4.  
  5. using namespace std;
  6.  
  7. string getSubstring(string &s, int first, int last)     //возвращает подстроку от first до last включительно
  8. {
  9.     if (first <= last)
  10.     {
  11.         string substring = "";
  12.         for (int i = first; i <= last; i++)
  13.             substring += s[i];
  14.         return substring;
  15.     }
  16. }
  17.  
  18. int stringLength(string &s)     //возвращает длину строки
  19. {
  20.     int i = 0;
  21.     while (s[i])
  22.         i++;
  23.     return i;
  24. }
  25.  
  26. bool isSubstring(string &str, string &substr, int substrBeginning)
  27. {
  28.     for (int i = 0; i < stringLength(substr); i++)
  29.         if (str[substrBeginning + i] != substr[i])
  30.             return false;
  31.     return true;
  32. }
  33.  
  34. bool substringsFirstCondition(string &str, string &substr, int center)      //проверяет, входит ли подстрока в строку только равноудаленно от концов
  35. {
  36.     int substringsCount = 1;
  37.     for (int j = 0; j < stringLength(str) - stringLength(substr) + 1; j++)
  38.         if (center != j)
  39.             if (str[j] == substr[0])       
  40.                 if (isSubstring(str, substr, j))
  41.                 {
  42.                     if (j < center)
  43.                     {
  44.                         if (j != stringLength(str) - center - stringLength(substr))
  45.                             return false;
  46.                     }
  47.                     else
  48.                         if (center != stringLength(str) - j - stringLength(substr))
  49.                             return false;
  50.                 substringsCount++;
  51.                 }
  52.             if (substringsCount == 2)
  53.                 return true;
  54.             else
  55.                 if (stringLength(str) - center - stringLength(substr) == center)
  56.                     return true;
  57. }
  58.  
  59. int substringsCount(string &str, string &substr, int center)        //возвращает количество вхождений подстроки в строку
  60. {
  61.     int counter = 1;
  62.     for (int j = 0; j < str.length() - substr.length() + 1; j++)
  63.         if (center != j)
  64.             if (str[j] == substr[0])
  65.             {
  66.                 if (isSubstring(str, substr, j))
  67.                     counter++;
  68.                 if (counter > 2)
  69.                     break;
  70.             }
  71.     return counter;
  72. }
  73.  
  74. void processStrings(string &string1, string &string2, string &firstSubString, string &secondSubString, int first)
  75. {
  76.     for (int j = 0; j < stringLength(string1); j++)
  77.     if (first <= j)
  78.     {
  79.         string check = getSubstring(string1, first, j);
  80.         if (substringsFirstCondition(string1, check, first))
  81.         {
  82.             firstSubString = check;
  83.             for (int k = 0; k < stringLength(string2) - stringLength(firstSubString) + 1; k++)
  84.             {
  85.                 check = getSubstring(string2, k, k + stringLength(firstSubString) - 1);
  86.                 if (substringsCount(string2, check, k) <= 2)
  87.                 {
  88.                     secondSubString = check;
  89.                     break;
  90.                 }
  91.             }
  92.             if (secondSubString[0])
  93.                 break;
  94.         }
  95.     }
  96. }
  97.  
  98. void findSubstrings(string &string1, string &string2, string &firstSubString, string &secondSubString)
  99. {
  100.     for (int i = 0; i < stringLength(string1); i++)
  101.     {
  102.         processStrings(string1, string2, firstSubString, secondSubString, i);
  103.         if (secondSubString[0])
  104.             break;
  105.     }
  106. }
  107.  
  108. string formResult(string &firstSubString, string &secondSubString)
  109. {
  110.     string result;
  111.     if (secondSubString[0])
  112.     {
  113.         stringstream resultStream;
  114.         for (int i = 0; i < stringLength(firstSubString); i++)
  115.             resultStream << firstSubString[i] << secondSubString[i];
  116.         result = resultStream.str();
  117.     }
  118.     else
  119.         result = "There are no requiered substrings";
  120.     return result;
  121. }
  122.  
  123. int main()
  124. {
  125.     string string1, string2;
  126.     cout << "Enter the first string: ";
  127.     cin >> string1;
  128.     cout << "Enter the second string: ";
  129.     cin >> string2;
  130.     string firstSubString, secondSubString;
  131.     findSubstrings(string1, string2, firstSubString, secondSubString);
  132.     cout << firstSubString << endl;
  133.     cout << secondSubString << endl;
  134.     string result = formResult(firstSubString, secondSubString);
  135.     cout << result << endl;
  136.     system("pause");
  137.     return 0;
  138. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement