Advertisement
dxvmxnd

Untitled

Mar 3rd, 2024 (edited)
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.26 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 num, string str) {
  138. string path;
  139.  
  140. path = choosePathForOutput();
  141. ofstream fout(path);
  142. fout << "Количество слов в заданной строке: " << num << endl;
  143. fout << "Самое длинное слово среди заданных: " << str << endl;
  144.  
  145. fout.close();
  146. cout << "Данные успешно записаны в файл!" << endl;
  147. }
  148.  
  149. void outputAnswer(int num, string str) {
  150. cout << "Количество слов в заданной строке: " << num << endl;
  151. cout << "Самое длинное слово среди заданных: " << str << endl;
  152.  
  153. outputAnswerInFile(num, str);
  154. }
  155.  
  156. int countAmountOfWords(string str) {
  157. int amount;
  158. string word;
  159.  
  160. amount = 0;
  161. word = "";
  162.  
  163. for (int i = 0; i < str.length(); i++) {
  164. if (str[i] != ' ') {
  165. word = word + str[i];
  166. }
  167. else {
  168. if (word.length() > 0){
  169. amount++;
  170. }
  171. word = "";
  172. }
  173. }
  174.  
  175. if (str[str.length() - 1] != ' ') {
  176. amount++;
  177. }
  178.  
  179. return amount;
  180. }
  181.  
  182. string findForLongestString(string str, int num) {
  183. string* words;
  184. int numOfWord;
  185. string word;
  186. string longestWord;
  187.  
  188. numOfWord = 0;
  189. word = "";
  190. words = new string[num];
  191.  
  192. for (int i = 0; i < str.length(); i++) {
  193. if (str[i] != ' ') {
  194. word = word + str[i];
  195. }
  196. else {
  197. if (word.length() > 0) {
  198. words[numOfWord] = word;
  199. numOfWord++;
  200. }
  201. word = "";
  202. }
  203. }
  204.  
  205. longestWord = "";
  206. for (int i = 0; i < num; i++) {
  207. if (words[i].length() > longestWord.length()) {
  208. longestWord = words[i];
  209. }
  210. }
  211.  
  212. return longestWord;
  213.  
  214. }
  215.  
  216. int main() {
  217. setlocale(LC_ALL, "Rus");
  218. system("chcp 1251");
  219.  
  220. bool isFromFile;
  221. string str;
  222. string longestStr;
  223. int amount;
  224.  
  225. outputTask();
  226. chooseInput(isFromFile);
  227. str = inputString(isFromFile);
  228. amount = countAmountOfWords(str);
  229. longestStr = findForLongestString(str, amount);
  230. outputAnswer(amount, longestStr);
  231.  
  232. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement