Advertisement
dxvmxnd

Untitled

Nov 19th, 2023
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.77 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <iterator>
  4. #include <set>
  5. #include <algorithm>
  6. #include <fstream>
  7.  
  8. using namespace std;
  9.  
  10. void outputTask() {
  11. cout << "Данная задача находит и выводит из введенного множества знаки математических операций и цифры." << endl;
  12. }
  13.  
  14. void outputSet(set<char> charSet) {
  15. cout << "Введенное множество: " << endl;
  16. for (char elem : charSet) {
  17. cout << elem << " ";
  18. }
  19. }
  20.  
  21. set<char> convertToSet(string str) {
  22. set <char> charSet = {};
  23.  
  24. for (char elem : str) {
  25. charSet.insert(elem);
  26. }
  27.  
  28. return charSet;
  29. }
  30.  
  31. string inputStringFromConsole() {
  32. string str;
  33. bool isCorrect;
  34. bool isNotCorrect;
  35. do {
  36. cout << "Введите элементы множества в строку без пробелов." << endl;
  37. cin >> str;
  38.  
  39. isCorrect = false;
  40. for (int i = 0; i < size(str); i++) {
  41. if ((str[i] != ' ') and (!isCorrect)) {
  42. isCorrect = true;
  43. }
  44. }
  45. if ((size(str) < 1) or (!isCorrect)) {
  46. cout << "Строка должна иметь хотя бы 1 символ и не иметь пробелы! Повторите попытку." << endl;
  47. isNotCorrect = true;
  48. }
  49. } while (isNotCorrect);
  50.  
  51.  
  52. return str;
  53. }
  54.  
  55. string inputStringFromFile(string path) {
  56. string str;
  57. bool isCorrect;
  58.  
  59. ifstream fin(path);
  60.  
  61. cout << "Считывание строки..." << endl;
  62. fin >> str;
  63. fin.close();
  64.  
  65. isCorrect = false;
  66. for (int i = 0; i < size(str); i++) {
  67. if ((str[i] != ' ') and (!isCorrect)) {
  68. isCorrect = true;
  69. }
  70. }
  71. if ((size(str) < 1) or (!isCorrect)) {
  72. cout << "Строка должна иметь хотя бы 1 символ и не иметь пробелы! Введите данные с клавиатуры." << endl;
  73. str = inputStringFromConsole();
  74. }
  75.  
  76. return str;
  77. }
  78.  
  79. string choicePath() {
  80. string path;
  81. bool isNotCorrect;
  82.  
  83. do {
  84. isNotCorrect = false;
  85. cout << "Введите путь файла: " << endl;
  86. cin >> path;
  87. ifstream fin(path);
  88. if (fin.is_open() and ((path[size(path) - 1] == 't') and (path[size(path) - 2] == 'x') and (path[size(path) - 3] == 't') and (path[size(path) - 4] == '.'))) {
  89. cout << "Файл успешно открыт!" << endl;
  90. }
  91. else {
  92. cout << "Ошибка открытия файла!" << endl;
  93. isNotCorrect = true;
  94. }
  95. fin.close();
  96. } while (isNotCorrect);
  97.  
  98. return path;
  99. }
  100.  
  101. set<char> inputFromFile() {
  102. string path;
  103. string stringOfElements;
  104. set<char> charSet = {};
  105.  
  106. cout << "При вводе из файла учтите, что в файле элементы множества должны быть записаны в строку без пробелов." << endl;
  107.  
  108. path = choicePath();
  109. stringOfElements = inputStringFromFile(path);
  110. charSet = convertToSet(stringOfElements);
  111.  
  112. return charSet;
  113. }
  114.  
  115. set<char> inputFromConsole() {
  116. set<char> charSet = {};
  117. string strOfElements;
  118.  
  119. strOfElements = inputStringFromConsole();
  120. charSet = convertToSet(strOfElements);
  121.  
  122. return charSet;
  123. }
  124.  
  125. set<char> choiceInput() {
  126. set<char> charSet;
  127. int choice;
  128. bool isNotCorrect;
  129.  
  130. do {
  131. isNotCorrect = false;
  132. cout << "Выберите, откуда будут вводиться данные. Введите 0, если с консоли; 1, если с файла" << endl;
  133. cin >> choice;
  134. if (cin.fail() or ((choice != 0) and (choice != 1))) {
  135. cout << "Неверный ввод данных!" << endl;
  136. isNotCorrect = true;
  137. cin.clear();
  138. while (cin.get() != '\n');
  139. }
  140. } while (isNotCorrect);
  141. if (choice == 0) {
  142. charSet = inputFromConsole();
  143. }
  144. else {
  145. charSet = inputFromFile();
  146. }
  147.  
  148.  
  149. outputSet(charSet);
  150.  
  151. return charSet;
  152. }
  153.  
  154. set<char> calculateSet(set<char> charSet) {
  155. set<char> symbols;
  156. set<char> resultSet;
  157.  
  158. symbols.insert({ '+', '-', '*', '/' });
  159. for (char digit = '0'; digit <= '9'; ++digit) {
  160. symbols.insert(digit);
  161. }
  162.  
  163. set_intersection(charSet.begin(), charSet.end(), symbols.begin(), symbols.end(), inserter(resultSet, resultSet.begin()));
  164.  
  165.  
  166. return resultSet;
  167. }
  168.  
  169. void outputAnswer(set<char> charSet) {
  170. bool isNotCorrect;
  171. string path;
  172.  
  173. if (size(charSet) == 0) {
  174. cout << "\nЗнаки мат.операций и цифры не содержатся в множестве!" << endl;
  175. }
  176. else {
  177. cout << "\nЦифры и знаки математических операций, встретившиеся в множестве: " << endl;
  178. for (char elem : charSet) {
  179. cout << elem << " ";
  180. }
  181. }
  182. do {
  183. isNotCorrect = false;
  184. cout << "\nВведите путь файла для вывода: " << endl;
  185. cin >> path;
  186. ofstream fout(path, fstream::app);
  187. if ((fout.is_open()) and ((path[size(path) - 1] == 't') and (path[size(path) - 2] == 'x') and (path[size(path) - 3] == 't') and (path[size(path) - 4] == '.'))) {
  188. cout << "Файл успешно открыт!" << endl;
  189. fout.close();
  190. }
  191. else {
  192. cout << "Ошибка открытия файла" << endl;
  193. isNotCorrect = true;
  194. }
  195. } while (isNotCorrect);
  196.  
  197. ofstream fout(path, fstream::app);
  198.  
  199. if (size(charSet) == 0) {
  200. fout << "\nЗнаки мат.операций и цифры не содержатся в множестве!" << endl;
  201. }
  202. else {
  203. fout << "\nЦифры и знаки математических операций, встретившиеся в множестве: " << endl;
  204. for (char elem : charSet) {
  205. fout << elem << " ";
  206. }
  207. }
  208.  
  209. fout.close();
  210.  
  211.  
  212. cout << "Ответ записан в файл." << endl;
  213. }
  214.  
  215. int main() {
  216. setlocale(LC_ALL, "Rus");
  217. system("chcp 1251");
  218. set <char> charSet;
  219.  
  220. outputTask();
  221. charSet = choiceInput();
  222. charSet = calculateSet(charSet);
  223. outputAnswer(charSet);
  224.  
  225. return 0;
  226. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement