Advertisement
Mike_be

Fikes

Apr 3rd, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.87 KB | None | 0 0
  1. template <typename T>
  2. typename T::size_type levenshtein_distance(const T & src, const T & dst)
  3. {
  4.     const typename T::size_type m = src.size();
  5.     const typename T::size_type n = dst.size();
  6.     if (m == 0)
  7.     {
  8.         return n;
  9.     }
  10.     if (n == 0)
  11.     {
  12.         return m;
  13.     }
  14.  
  15.     std::vector<std::vector<typename T::size_type>> matrix(m + 1);
  16.  
  17.     for (typename T::size_type i = 0; i <= m; ++i)
  18.     {
  19.         matrix[i].resize(n + 1);
  20.         matrix[i][0] = i;
  21.     }
  22.     for (typename T::size_type i = 0; i <= n; ++i)
  23.     {
  24.         matrix[0][i] = i;
  25.     }
  26.  
  27.     typename T::size_type above_cell, left_cell, diagonal_cell, cost;
  28.  
  29.     for (typename T::size_type i = 1; i <= m; ++i)
  30.     {
  31.         for (typename T::size_type j = 1; j <= n; ++j)
  32.         {
  33.             cost = src[i - 1] == dst[j - 1] ? 0 : 1;
  34.             above_cell = matrix[i - 1][j];
  35.             left_cell = matrix[i][j - 1];
  36.             diagonal_cell = matrix[i - 1][j - 1];
  37.             matrix[i][j] = std::min(std::min(above_cell + 1, left_cell + 1), diagonal_cell + cost);
  38.         }
  39.     }
  40.  
  41.     return matrix[m][n];
  42. }
  43.  
  44. string make_path(string str)
  45. {
  46.     string extension = "";
  47.     unsigned int j;
  48.     if (str.length() >= 4)
  49.     {
  50.         j = str.length() - 4;
  51.         for (int i = 0; i < 4; i++)
  52.         {
  53.             extension.push_back(str[j]);
  54.             j++;
  55.         }
  56.     }
  57.     if (extension == ".txt")
  58.         str = "Books/" + str;
  59.     else
  60.         str = "Books/" + str + ".txt";
  61.     return str;
  62. }
  63.  
  64. void filling_strings(vector<string>& vec)
  65. {
  66.     unsigned int max_l = 0;
  67.     for (unsigned int i = 0; i < vec.size(); i++)
  68.     {
  69.         if (vec[i].length() > max_l)
  70.             max_l = vec[i].size();
  71.     }
  72.     for (unsigned int i = 0; i < vec.size(); i++)
  73.     {
  74.         while (vec[i].length() < max_l)
  75.             vec[i].push_back(' ');
  76.     }
  77. }
  78.  
  79. string shorting_string(string str)
  80. {
  81.     while (str[str.length() - 1] == ' ')
  82.         str.pop_back();
  83.     return str;
  84. }
  85.  
  86. string vec_search(const vector<string>& vec, const string& str)
  87. {
  88.     unsigned int i = 0, k = 0, dist = 100;
  89.     while (k < vec.size())
  90.     {
  91.         if (levenshtein_distance(vec[k], str) < dist)
  92.         {
  93.             dist = levenshtein_distance(vec[k], str);
  94.             i = k;
  95.         }
  96.         k++;
  97.     }
  98.     return vec[i];
  99. }
  100.  
  101. bool empty(const string& str)
  102. {
  103.     bool empty = true;
  104.     if (!str.empty())
  105.     {
  106.         for (unsigned int i = 0; i < str.length(); i++)
  107.         {
  108.             if (str[i] != ' ')
  109.             {
  110.                 empty = false;
  111.             }
  112.         }
  113.     }
  114.     return empty;
  115. }
  116.  
  117. void files(vector<string>& vec)
  118. {
  119.     for (auto p : directory_iterator("Books"))
  120.     {
  121.         vec.push_back(p.path().string());
  122.     }
  123.     filling_strings(vec);
  124. }
  125.  
  126. void check_files(vector<string>& vec)
  127. {
  128.     unsigned int i;
  129.     vector<string> vec_2;
  130.     bool same_name = true;
  131.     for (auto p : directory_iterator("Books"))
  132.     {
  133.         vec_2.push_back(p.path().string());
  134.     }
  135.     filling_strings(vec_2);
  136.     if (vec_2.size() != vec.size())
  137.     {
  138.         vec.clear();
  139.         vec = vec_2;
  140.         filling_strings(vec);
  141.     }
  142.     else
  143.     {
  144.         if (vec.size() > vec_2.size())
  145.             i = vec_2.size();
  146.         else
  147.             i = vec.size();
  148.         for (unsigned j = 0; j < i; j++)
  149.         {
  150.             if (vec[j] != vec_2[j])
  151.             {
  152.                 vec = vec_2;
  153.                 return;
  154.             }
  155.         }
  156.     }
  157. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement