Скалярный фундаментальный тип int
не имеет методов. Таким образом, эти записи
a.append(b);
b.append(a);
являются недействительными.
Кажется, что при использовании такой конструкции, как эта
a.append(b)
вы пытаетесь преобразовать целое число в объекткласс std::string
. Однако, если a
и b
были объектами типа std::string
, нет смысла добавлять один объект к другому. Достаточно сравнить исходные строки.
Кажется, что вы пытаетесь достичь следующего:
#include <iostream>
#include <string>
#include <iterator>
#include <algorithm>
bool myCompare( unsigned int a, unsigned int b )
{
std::string s1 = std::to_string( a );
std::string s2 = std::to_string( b );
auto n = std::minmax( { s1.size(), s2.size() } );
int result = s1.compare( 0, n.first, s2, 0, n.first );
return ( result > 0 ) ||
( result == 0 &&
( ( s1.size() < n.second && s2[n.first] < s1[0] ) ||
( s2.size() < n.second && s2[0] < s1[n.first] ) ) );
}
int main()
{
unsigned int a[] = { 54, 546, 548, 60 };
std::sort( std::begin( a ), std::end( a ), myCompare );
std::string s;
for ( const auto &item : a )
{
s += std::to_string( item );
}
unsigned long long int value = std::stoull( s );
std::cout << "The maximum number is " << value << '\n';
return 0;
}
Вывод программы:
The maximum number is 6054854654
, еслиномер результата может быть слишком большим, чтобы поместиться в объект типа unsigned long long int, тогда вы можете удалить оператор
unsigned long long int value = std::stoull( s );
и просто вывести строку результата как
std::cout << "The maximum number is " << s << '\n';