Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2019
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.94 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3. #include <string>
  4. #include <vector>
  5. #include <sstream>
  6. #include <iterator>
  7. #include <algorithm>
  8.  
  9. unsigned BinarySearch(std::wstring& str, unsigned left, unsigned right, wchar_t tgt)
  10. {
  11. if (left > right)
  12. return 0;
  13. int ctr = left + (right - left) / 2;
  14. if (tgt < str[ctr])
  15. return BinarySearch(str, left, ctr - 1, tgt);
  16. else if (tgt > str[ctr])
  17. return BinarySearch(str, ctr + 1, right, tgt);
  18. else
  19. {
  20. int count = 1;
  21. if (ctr != right)
  22. for (int t = ctr + 1; t <= right && str[t] == tgt; count++, t++);
  23. if (ctr != left)
  24. for (int t = ctr - 1; t >= left && str[t] == tgt; count++, t--);
  25. return count;
  26. }
  27. }
  28.  
  29. int main()
  30. {
  31. std::wcin.imbue(std::locale("rus_rus.866"));
  32. std::wcout.imbue(std::locale("rus_rus.866"));
  33. std::wstring buffer;
  34. std::vector<std::wstring> words;
  35. for (;;)
  36. {
  37. std::wcout << L"Введите текст. Для прекращения введите пустую строку:" << std::endl;
  38. do
  39. {
  40. std::getline(std::wcin, buffer);
  41. std::wistringstream iss(buffer);
  42. std::copy(std::istream_iterator<std::wstring, wchar_t>(iss),
  43. std::istream_iterator<std::wstring, wchar_t>(),
  44. std::back_inserter(words));
  45. } while (!buffer.empty());
  46. if (words.empty())
  47. {
  48. std::wcout << L"Вы не ввели ни одного слова. Попробуйте снова" << std::endl;
  49. continue;
  50. }
  51. break;
  52. }
  53. for (;;)
  54. {
  55. std::wcout << L"Введите маску слова в формате \"st*d**t\" (student) :" << std::endl;
  56. std::getline(std::wcin, buffer);
  57. if (buffer.empty())
  58. {
  59. std::wcout << L"Вы ввели пустую строку. Попробуйте снова" << std::endl;
  60. continue;
  61. }
  62. break;
  63. }
  64.  
  65.  
  66. bool have = false;
  67. for (auto& word : words)
  68. if (word.length() == buffer.length())
  69. {
  70. bool flag = true;
  71. for (auto i = 0; i < word.length(); ++i)
  72. if (buffer[i] != L'*' && word[i] != buffer[i])
  73. {
  74. flag = false;
  75. break;
  76. }
  77. if (flag)
  78. {
  79. if (!have)
  80. {
  81. std::wcout << L"Совпадения: " << std::endl;
  82. have = true;
  83. }
  84. std::wcout << word << std::endl;
  85. }
  86. }
  87. if (!have)
  88. std::wcout << L"Совпадений нет" << std::endl;
  89. std::wcout << std::endl;
  90. for (;;)
  91. {
  92. std::wcout << L"Введите строку, в которой будет производиться бинарный поиск:" << std::endl;
  93. std::getline(std::wcin, buffer);
  94. if (buffer.empty())
  95. {
  96. std::wcout << L"Вы ввели пустую строку. Попробуйте снова" << std::endl;
  97. continue;
  98. }
  99. break;
  100. }
  101. std::wcout << L"Введите искомую букву:" << std::endl;
  102. wchar_t target;
  103. std::wcin >> target;
  104. std::sort(buffer.begin(), buffer.end());
  105. std::wcout << L"Найдено: " << BinarySearch(buffer, 0, buffer.length() - 1, target) << std::endl;
  106. system("pause");
  107. return 0;
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement