A format for expressing an ordered list of integers is to use a comma separated list of either
individual integers
or a range of integers denoted by the starting integer separated from the end integer in the range by a dash, '-'. The range includes all integers in the interval including both endpoints. It is not considered a range unless it spans at least 3 numbers. For example ("12, 13, 15-17")
Complete the solution so that it takes a list of integers in increasing order and returns a correctly formatted string in the range format.
#include<string>#include<vector>using std::to_string;std::stringrange_extraction(std::vector<int> args){ std::string res =to_string(args[0]);bool is_range =false;for (int i =1, prev =args[0], range_len =0; i <args.size(); prev =args[i++]) {int fi = i ==args.size()-1;if (args[i] == prev+1) { is_range =true; range_len++; }if (fi) //special logic for the last element {if (range_len >1&&args[i] == prev+1) res+='-'+to_string(args[i]);elseif (range_len >1) // but last element is not part of the seq res+='-'+to_string(args[i-1])+','+to_string(args[i]);elseif (range_len ==1&&args[i] != prev+1) res+=','+to_string(args[i-1]) +','+to_string(args[i]);else res+=','+to_string(args[i]);break; }elseif(args[i] != prev+1) // non sequence logic {if(range_len) //we got here every time when sequence ends {if (range_len >1) res+='-'+to_string(args[i-1]);elseif (range_len ==1) res+=','+to_string(args[i-1]); range_len =0; is_range =false; } res+=','+to_string(args[i]); } }return res;}