Advertisement
dxvmxnd

Untitled

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