fork(2) download
  1. #include <vector>
  2. #include <string>
  3. #include <sstream>
  4. #include <iostream>
  5. using namespace std;
  6.  
  7. int ConvertString2Int(const string& str)
  8. {
  9. stringstream ss(str);
  10. int x;
  11. if (! (ss >> x))
  12. {
  13. cerr << "Error converting " << str << " to integer" << endl;
  14. abort();
  15. }
  16. return x;
  17. }
  18.  
  19. vector<string> SplitStringToArray(const string& str, char splitter)
  20. {
  21. vector<string> tokens;
  22. stringstream ss(str);
  23. string temp;
  24. while (getline(ss, temp, splitter)) // split into new "lines" based on character
  25. {
  26. tokens.push_back(temp);
  27. }
  28. return tokens;
  29. }
  30.  
  31. vector<int> ParseData(const string& data)
  32. {
  33. vector<string> tokens = SplitStringToArray(data, ',');
  34.  
  35. vector<int> result;
  36. for (vector<string>::const_iterator it = tokens.begin(), end_it = tokens.end(); it != end_it; ++it)
  37. {
  38. const string& token = *it;
  39. vector<string> range = SplitStringToArray(token, '-');
  40. if (range.size() == 1)
  41. {
  42. result.push_back(ConvertString2Int(range[0]));
  43. }
  44. else if (range.size() == 2)
  45. {
  46. int start = ConvertString2Int(range[0]);
  47. int stop = ConvertString2Int(range[1]);
  48. for (int i = start; i <= stop; i++)
  49. {
  50. result.push_back(i);
  51. }
  52. }
  53. else
  54. {
  55. cerr << "Error parsing token " << token << endl;
  56. abort();
  57. }
  58. }
  59.  
  60. return result;
  61. }
  62.  
  63. int main()
  64. {
  65. vector<int> result = ParseData("1-5,10,12,15-16,25-35,67,69,99-105");
  66. for (vector<int>::const_iterator it = result.begin(), end_it = result.end(); it != end_it; ++it)
  67. {
  68. cout << *it << " ";
  69. }
  70. cout << endl;
  71. }
  72.  
  73.  
Success #stdin #stdout 0s 3480KB
stdin
Standard input is empty
stdout
1 2 3 4 5 10 12 15 16 25 26 27 28 29 30 31 32 33 34 35 67 69 99 100 101 102 103 104 105