Advertisement
Guest User

Untitled

a guest
Feb 19th, 2020
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.25 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. bool check(string s){
  7. int last_pos = 0;
  8. while (last_pos != -1){
  9. int pos = s.find("+", last_pos);
  10. string a = s.substr(last_pos, pos-last_pos-1);
  11. for (int i = 0; i < a.size(); i++)
  12. if (not isdigit(a[i]) and a[i] != ' '){
  13. return false;
  14. }
  15. if (pos == -1)
  16. last_pos = -1;
  17. else
  18. last_pos = pos + 1;
  19. }
  20. return true;
  21. }
  22.  
  23. int main(){
  24. string s;
  25. getline(cin, s);
  26.  
  27. bool check_result = check(s);
  28. if (not check_result)
  29. cout << "Некорректная строка!" << endl;
  30. else {
  31. int sum = 0;
  32. int last_pos = 0;
  33.  
  34. while (last_pos != -1){
  35. int pos = s.find("+", last_pos);
  36. int a = stoi(s.substr(last_pos, pos-last_pos-1));
  37.  
  38. sum += a;
  39.  
  40. if (pos == -1)
  41. last_pos = -1;
  42. else
  43. last_pos = pos + 1;
  44. }
  45. cout << "Сумма: " << sum << endl;
  46. }
  47. return 0;
  48. }
  49.  
  50. #include <iostream>
  51. #include <string>
  52.  
  53. using namespace std;
  54.  
  55. bool check(string s){ // Функция для проверки строки. Делаем её типа bool, чтобы она возвращала только true, если строка норм, или false, если не норм
  56. int last_pos = 0; // Переменная, в которую мы записываем индекс последнего разделителя нашей строки. Строку мы будем делить по плюсам,
  57. // ведь у нас в корректной строке числа разделены пробелами и плюсами, а функции stoi на пробелы похуй. Но потом я в эту переменную
  58. // буду записывать индекс разделителя + 1 для удобства (индекс первого элемента после разделителя)
  59. while (last_pos != -1){ // пока last_pos не равно -1, т.к. метод find даёт -1, если ничего не находит, а не найдёт он, если мы уже дошли до последнего
  60. // числа и разделителя после него нет.
  61. int pos = s.find("+", last_pos); // Записываем в переменную позицию разделителя. В find я пихнул last_pos, который указывавет на то, с какой
  62. // позиции нам начинать поиск. Это надо для того, чтобы он не находил нам каждый раз первый +. Мы указываем
  63. // позицию первого символа после последнего найденного плюча как начало, и метод будет искать первый + после него
  64. string a = s.substr(last_pos, pos-last_pos-1); // Берём из s подстроку, начало которой - last_pos (берём с первого элемента после разделителя),
  65. // а количество символов pos - last_pos - 1 (-1 для того, чтобы не брать найденный +, ибо в pos его позиция)
  66. // Если второй аргумент функции отрицательный (а это случается, если pos == -1, т.е., разделителей больше
  67. // нет), то возвращается подстрока от last_pos до конца строки
  68. for (int i = 0; i < a.size(); i++) // Идём в цикле по полученной строке
  69. if (not isdigit(a[i]) and a[i] != ' '){ // Смотрим по каждому символу. Если он не является цифрой (с помощью isdigit) и не пробел, то тут не число, бан
  70. return false; // Поэтому возвращаем false, и функция прекратится
  71. }
  72.  
  73. // Далее, если pos == -1, то у нас в строке больше нет разделителей, значит мы дошли до последнего элемента, и last_pos надо сделать -1, чтобы цикл больше
  74. // не запускался
  75. if (pos == -1)
  76. last_pos = -1;
  77. else // Если pos не -1, то значит ещё есть число, которое мы не обработали, и делаем last_pos = pos + 1 для удобства
  78. last_pos = pos + 1;
  79. }
  80. return true; // Если в цикле ни разу не нашлось неподходящих символов и он не вернул false, то запускается эта часть кода, которая возвращает true.
  81. }
  82.  
  83. int main(){
  84. string s;
  85. getline(cin, s);
  86.  
  87. bool check_result = check(s); // Записываем результат нашей функции проверки
  88. if (not check_result)
  89. cout << "Некорректная строка!" << endl;
  90. else {
  91. // Здесь поступаем аналогично, только вместо проверки каждого символа подстроки a на корректность просто преобразуем её в int и прибавляем к sum
  92. int sum = 0;
  93. int last_pos = 0;
  94.  
  95. while (last_pos != -1){
  96. int pos = s.find("+", last_pos);
  97. int a = stoi(s.substr(last_pos, pos-last_pos-1));
  98.  
  99. sum += a;
  100.  
  101. if (pos == -1)
  102. last_pos = -1;
  103. else
  104. last_pos = pos + 1;
  105. }
  106. cout << "Сумма: " << sum << endl;
  107. }
  108. return 0;
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement