прерывание вызывается после создания экземпляра сравнения строк 'std :: logic_error' - PullRequest
0 голосов
/ 23 мая 2019

Составьте наибольшее число из набора целых чисел. Набор целых чисел может быть больше 1 цифры.

Так как числа могут быть больше чем одна цифра, использование жадного алгоритма и сортировка их в порядке убывания не помогут. Например: вход: 21 и 2, Сортировка по убыванию дала бы ответ 212, что неверно, поскольку 221> 212

Я решил придумать следующий алгоритм: У меня есть вектор строк в качестве входных данных, поэтому я использую функцию std :: sort с пользовательской функцией для его сортировки.

Если у меня есть две строки i = "21" и j = "2", я объединяю i, j и j, i, а затем сравниваю результат

bool isGreater(string i,string j){
  string a = i+j;
  string b = j+i;
  return a >= b;

}

string largest_number(vector<string> a) {
 string result =" ";
 sort (a.begin(),a.end(),isGreater);
 for(int i =0; i<a.size(); i++){
   result+=a[i];
 }
  return result;
}

В некоторых случаях это работает, но я провалю несколько тестовых случаев и получаю сообщение:

STDERR: прекращение вызова после создания экземпляра 'std :: logic_error' what (): basic_string :: _ M_construct null недействительно

Ценю любую помощь.

...