Advertisement
Guest User

Budlo cod

a guest
Jun 5th, 2010
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.05 KB | None | 0 0
  1. #include<iostream>
  2. #include<vector>
  3. using namespace std;
  4.  
  5. /*Эта программа находит и заменяет в матрице символов все буквы совподающих
  6. слов на заглавные и только если слова написанны сверху вниз и/или слева направо.
  7.  
  8. При компиляции использовался gcc 4.4 c параметрами -ansi -Wall -O2 -DNDEBUG -Wextra -Werror -Wno-uninitialized -Wno-sign-compare -Wshadow -o
  9.  
  10. Сначало вводится колчество слов, строк и столбцов:
  11.  
  12. 1 3 4
  13.  
  14. Потом слова:
  15. gnu
  16.  
  17. И вконце матрица:
  18.  
  19. g n u p
  20. n n s t
  21. u t u y
  22.  
  23. И выдаст:
  24.  
  25. G N U p
  26. N N s t
  27. U t U y
  28.  
  29. */
  30.  
  31. //Эти три рекурсивные функция находят и заменяют строчные буквы на
  32. //заглавные для всех слов из вектора v написанных сверху вниз,
  33. //слева на права и по диагонали соответсвеннож
  34. bool d(const string& s, vector< vector<char> >& v, int x, int y, int n) {
  35.     if (s.size() == n) return true; //если мы прошли до конца и не нашли ни одного раздичия возвращяется True
  36.     char c = v[x + n][y];
  37.     if (c  < 'a') c = char(c - 'A' + 'a'); // Если символ не строчной делаю его таковым
  38.     char cc = char(c + 'A' - 'a'); //Создаю заглавный символ
  39.     if (s[n] == c and d(s, v, x, y, n+1)) { //Если текущий символ слова равен текущиму символу матрицы и тоже самое верно для следующего, то...
  40.         v[x + n][y] = cc; //Заменяю символ в матрице на заглавный
  41.         return true;
  42.     }
  43.     return false;
  44. }
  45.  
  46. bool r(const string& s, vector< vector<char> >& v, int x, int y, int n) {
  47.     if (s.size() == n) return true;
  48.     char c = v[x][y + n];
  49.     if (c  < 'a') c = char(c - 'A' + 'a');
  50.     char cc = char(c + 'A' - 'a');
  51.     if (s[n] == c and r(s, v, x, y, n+1)) {
  52.         v[x][y + n] = cc;
  53.         return true;
  54.     }
  55.     return false;
  56. }
  57.  
  58. bool di(const string& s, vector< vector<char> >& v, int x, int y, int n) {
  59.     if (s.size() <= n) return true;
  60.     char c = v[x + n][y + n];
  61.     if (c  < 'a') c = char(c - 'A' + 'a');
  62.     char cc = char(c + 'A' - 'a');
  63.     if (s[n] == c and di(s, v, x, y, n+1)) {
  64.         v[x + n][y + n] = cc;
  65.         return true;
  66.     }
  67.     return false;
  68. }
  69.  
  70.  
  71. void search(const vector<string>& w, vector< vector<char> >& v) {
  72.     for (int i = 0; i < w.size(); ++i) { //"Перелистываю" слова
  73.         for (int x = 0; x < v.size(); ++x) { //Перехожу на следующую строчку в матрице
  74.             for (int y = 0; y < v[x].size(); ++y) { //Перехожу на следующую строчку в матрице
  75.                 // каждый if проверяет чтобы наш поиск не завел нас за матрицу
  76.                 if ((x + w[i].size() - 1) < v.size()) d(w[i], v, x, y, 0);
  77.                 if ((y + w[i].size() - 1) < v[0].size()) r(w[i], v, x, y, 0);
  78.                 if ((x + w[i].size() - 1) < v.size() and (y + w[i].size() - 1) < v[0].size()) di(w[i], v, x, y, 0);
  79.             }
  80.         }
  81.     }
  82. }
  83.  
  84. int main() {
  85.     int x, m, n;
  86.     bool first = true;
  87.     while (cin >> x >> m >> n) {
  88.         if (first) first = false;
  89.         else cout << endl;
  90.         vector<string> words(x);
  91.         for (int i = 0; i < x; ++i) cin >> words[i];
  92.         vector< vector<char> > crossword(m, vector<char> (n));
  93.         for (int i = 0; i < m; ++i) {
  94.             for (int j = 0; j < n; ++j) cin >> crossword[i][j];
  95.         }
  96.         search(words, crossword);
  97.         for (int i = 0; i < m; ++i) {
  98.             cout << crossword[i][0];
  99.             for (int j = 1; j < n; ++j) cout << ' ' <<  crossword[i][j];
  100.             cout << endl;
  101.         }
  102.     }
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement