Advertisement
dxvmxnd

Untitled

Mar 2nd, 2024
16
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.71 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 = false;
  60. cout << "Введите строку:" << endl;
  61. getline(cin, str);
  62. for (int i = 0; i < str.length(); i++) {
  63. if (str[i] == ' ') {
  64. isNotCorrect = true;
  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 = true;
  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 = false;
  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. void checkForLetters(string str, bool& error) {
  113. error = false;
  114. for (int i = 0; i < str.length(); i++) {
  115. if (!(((str[i] > 'a') and (str[i] < 'z')) or ((str[i] > 'A') and (str[i] < 'Z')) or (str[i] == '_') or ((str[i] > '0') and (str[i] < '9')))) {
  116. error = true;
  117. }
  118. }
  119. }
  120.  
  121. void checkForFirstLetter(string str, bool& error) {
  122. error = !(((str[0] > 'a') and (str[0] < 'z')) or ((str[0] > 'A') and (str[0] < 'Z')) or (str[0] == '_'));
  123. }
  124.  
  125. bool checkForTrue(string str, bool*& errors) {
  126. errors = new bool[2];
  127. errors[0] = false;
  128. errors[1] = false;
  129. checkForFirstLetter(str, errors[0]);
  130. checkForLetters(str, errors[1]);
  131.  
  132. return (!(errors[1] or errors[0]));
  133. }
  134.  
  135. string choosePathForOutput() {
  136. string path;
  137. bool isNotCorrect;
  138.  
  139. do {
  140. isNotCorrect = false;
  141. cout << "Введите путь к файлу для вывода информации:" << endl;
  142. cin >> path;
  143. ofstream fout(path);
  144. if ((!fout.is_open()) or (path.length() < 5)) {
  145. isNotCorrect = true;
  146. cout << "Ошибка ввода! Повторите попытку." << endl;
  147. }
  148. else {
  149. if (path[path.length() - 1] != 't' and path[path.length() - 2] != 'x' and path[path.length() - 3] != 't' and path[path.length() - 4] != '.') {
  150. isNotCorrect = true;
  151. cout << "Ошибка ввода! Повторите попытку." << endl;
  152. }
  153. }
  154. fout.close();
  155. } while (isNotCorrect);
  156.  
  157. return path;
  158. }
  159.  
  160. void outputAnswerInFile(bool isCorrect, bool* errors) {
  161. string path;
  162.  
  163. path = choosePathForOutput();
  164. ofstream fout(path);
  165. if (isCorrect) {
  166. fout << "Данная строка является идентификатором!" << endl;
  167. }
  168. else {
  169. fout << "Строка не является идентификатором!" << endl;
  170. if (errors[0]) {
  171. fout << "Строка начинается не с английской буквы либо нижнего подчеркивания!" << endl;
  172. }
  173. if (errors[1]) {
  174. fout << "Строка содержит символы, не являющиеся английскими буквами, цифрами либо нижним подчеркиванием!" << endl;
  175. }
  176. }
  177.  
  178. fout.close();
  179. cout << "Данные успешно записаны в файл!" << endl;
  180. }
  181.  
  182.  
  183. void outputAnswer(bool isCorrect, bool* errors) {
  184. if (isCorrect) {
  185. cout << "Данная строка является идентификатором!" << endl;
  186. }
  187. else {
  188. cout << "Строка не является идентификатором!" << endl;
  189. if (errors[0]) {
  190. cout << "Строка начинается не с английской буквы либо нижнего подчеркивания!" << endl;
  191. }
  192. if (errors[1]) {
  193. cout << "Строка содержит символы, не являющиеся английскими буквами, цифрами либо нижним подчеркиванием!" << endl;
  194. }
  195. }
  196.  
  197. outputAnswerInFile(isCorrect, errors);
  198. }
  199.  
  200. int main() {
  201. setlocale(LC_ALL, "Rus");
  202.  
  203. bool isFromFile;
  204. string str;
  205. bool* errors;
  206. bool isCorrect;
  207.  
  208. outputTask();
  209. chooseInput(isFromFile);
  210. str = inputString(isFromFile);
  211. isCorrect = checkForTrue(str, errors);
  212. outputAnswer(isCorrect, errors);
  213.  
  214. delete[] errors;
  215. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement