Незнаю верно ли я все понял, но как вариант можно сделать так//Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23506 for x64#include <iostream>#include <string>#include <sstream>#include <vector>#include <iterator> #include <algorithm>bool DigitFirst(const std::string& rhs, const std::string& lhs){ if (isdigit(rhs[0]) || isdigit(lhs[0])) return rhs < lhs;}bool LetterFirst(const std::string& rhs, const std::string& lhs){ if (isalpha(rhs[0]) || isalpha(lhs[0])) return rhs < lhs;}const std::string TrueSort(std::string str, bool(*comparator)(const std::string&rhs, const std::string& lhs)){ std::stringstream ss(str); std::vector<std::string> vstr(std::istream_iterator<std::string>(ss), {}); std::sort(vstr.begin(), vstr.end(), comparator); ss.clear(); std::copy(vstr.begin(), vstr.end(), std::ostream_iterator<std::string>(ss, " ")); return ss.str();}int main(){ std::string first = "position total 12345 2jz asd512fgh"; std::string second = "year 10010 2018r r98k hello"; std::cout << TrueSort(first, DigitFirst ) << std::endl; std::cout << TrueSort(second, LetterFirst);}