fork download
  1. #include <iostream>
  2. #include <iterator>
  3. #include <vector>
  4. #include <regex>
  5.  
  6. std::vector<int> parse(const std::string &iStr) {
  7. std::vector<int> Ret;
  8. std::vector<std::string> Tmp;
  9. std::string Work(iStr);
  10. Work.erase(0,Work.find_first_not_of(' '));
  11. Work.erase(Work.find_last_not_of(' ')+1);
  12. std::cout << "\"" << iStr << "\": ";
  13. try {
  14. if (Work.length() == 0) throw std::invalid_argument("Пустая строка");
  15. if (Work[0] == ',') throw std::invalid_argument("В первой позиции не число");
  16. if (Work[Work.length()-1] == ',') throw std::invalid_argument("В последней позиции не число");
  17. std::regex Rx("\\s*,\\s*");
  18. std::sregex_token_iterator Begin(Work.begin(), Work.end(), Rx, -1);
  19. std::sregex_token_iterator End;
  20. while (Begin != End) Tmp.push_back((Begin++)->str());
  21. Rx = "^\\s*((\\+|-)?[0-9]+)\\s*,?\\s*$";
  22. int Pos = 0;
  23. for(const auto &i:Tmp) {
  24. std::smatch Match;
  25. std::regex_search(i, Match, Rx);
  26. if (Match.size() == 3)
  27. Ret.push_back(std::stoi(Match.str(1),nullptr,10));
  28. else
  29. throw std::invalid_argument("В позиции "+std::to_string(Pos)+" не число");
  30. Pos++;
  31. }
  32. std::cout << "Ok";
  33. } catch (std::invalid_argument &E) {
  34. std::cout << E.what();
  35. }
  36. std::cout << std:: endl;
  37. return Ret;
  38. }
  39.  
  40. int main() {
  41. parse("1, 4, 5, -6, -8 , 3, 1");
  42. parse(" 5 , 6, 57, +68 , 18, 32, 4 ");
  43. parse("77");
  44. parse("");
  45. parse(" ");
  46. parse("1, 4, 5, 6, 8, 3, 1,");
  47. parse(" , 6, 57, 68 , 18, 32, 4");
  48. parse("5, 6, , 68, 18, 32, 4");
  49. parse("5, 6,, 68, 18, 32, 4");
  50. parse("5, 6, T, 68, 18, 32, 4");
  51. parse("5, 6, 34T, 68, 18, 32, 4");
  52. parse("5, 6, 34 55, 68, 18, 32, 4");
  53. parse(",");
  54. parse(",,");
  55. parse(",, ,, ,,,");
  56. return 0;
  57. }
Success #stdin #stdout 0.01s 3512KB
stdin
Standard input is empty
stdout
"1, 4, 5, -6, -8 , 3, 1": Ok
"       5 , 6, 57, +68 , 18, 32, 4   ": Ok
"77": Ok
"": Пустая строка
"    ": Пустая строка
"1, 4, 5, 6, 8, 3, 1,": В последней позиции не число
" , 6, 57, 68 , 18, 32, 4": В первой позиции не число
"5, 6, , 68, 18, 32, 4": В позиции 2 не число
"5, 6,, 68, 18, 32, 4": В позиции 2 не число
"5, 6, T, 68, 18, 32, 4": В позиции 2 не число
"5, 6, 34T, 68, 18, 32, 4": В позиции 2 не число
"5, 6, 34 55, 68, 18, 32, 4": В позиции 2 не число
",": В первой позиции не число
",,": В первой позиции не число
",, ,, ,,,": В первой позиции не число