код для решения задачи C++ codewars

Задача:

"in this little assignment you are given a string of space separated numbers, and have to return the highest and lowest number.

Examples
   highAndLow("1 2 3 4 5");  // return "5 1"
   highAndLow("1 2 -3 4 5"); // return "5 -3"
   highAndLow("1 9 3 4 -5"); // return "9 -5"

Notes All numbers are valid Int32, no need to validate them. There will always be at least one number in the input string. Output string must be two numbers separated by a single space, and highest number is first."

мой код:

#include <string>
using namespace std;
string highAndLow(const string& numbers){
  string::iterator it;
  int h, l;
  for(it = &numbers.begin(); it != &numbers.end(); ++it) {
    if (it == &numbers.begin()) {
      h = (int*)it;
      l = (int*)it;
    }
    else {
      if (h < (int)it) {
        h = (int*)it;
      }
      if (l > (int*)it) {
        l = (int*)it;
      }
    }
    return string(h + " " + l + "\n");
  }
}

Я начал учить срр только несколько дней назад, пожалуйста, не судите строго.


Ответы (1 шт):

Автор решения: Harry

Начнем с того, что ваш код просто не компилируется. А если бы и компилировался — то не работал бы. Итератор строки перебирает символы, и он никакого отношения к int не имеет, да и присвоение переменной типа int чего-то, приведенного к int*...

Словом, все плохо :(

Я бы делал так:

string highAndLow(const string& numbers)
{
    istringstream is(numbers);
    int n, min, max;
    is >> n;
    min = max = n;
    while(is >> n)
        if (n < min) min = n;
        else if (n > max) max = n;
    return to_string(max) + " " + to_string(min);
}

Или даже вот так:

string highAndLow(const string& numbers)
{
    istringstream is(numbers);
    auto p = minmax_element(istream_iterator<int>(is),istream_iterator<int>());
    return to_string(*p.second) + " " + to_string(*p.first);
}
→ Ссылка