请求 'a' 中的成员 'append',非 class 类型 'int'
request for member 'append' in 'a' , which is of non class type 'int'
我是编程新手,所以我的疑虑可能很愚蠢。
所以当我试图解决一个挑战时,我必须从数组中的数字中形成最大的数字。
所以我创建了一个比较函数并传递给排序函数。在比较函数中,我检查 a+b 是否大于 b+a,反之亦然。
但编译器显示错误,指出成员非 class 类型的请求。
我实际上不知道如何解决这个问题,我尝试使用谷歌搜索但没有得到我的解决方案。
我找到了类似的解决方案,但他们是用字符串来做的。可以用数组来完成吗?
int myCompare( int a, int b){
int ab= a.append(b);
int ba= b.append(a);
if(ab>ba){
return 1;
}else{
return 0;
}
}
void biggestnum(int arr[], int n){
if(n==0 || n==1){
return;
}
sort(arr,arr+n, myCompare);
for(int i=0;i<n;i++){
cout<<arr[i]<<" ";
}
cout<<endl;
}
所以如果给定的数组是{54, 546, 548, 60};
结果应该是 6054854654.
标量基本类型int
没有方法。所以这些记录
a.append(b);
b.append(a);
无效。
好像是这样构造的
a.append(b)
您正在尝试将整数转换为 class 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';
我是编程新手,所以我的疑虑可能很愚蠢。 所以当我试图解决一个挑战时,我必须从数组中的数字中形成最大的数字。 所以我创建了一个比较函数并传递给排序函数。在比较函数中,我检查 a+b 是否大于 b+a,反之亦然。 但编译器显示错误,指出成员非 class 类型的请求。
我实际上不知道如何解决这个问题,我尝试使用谷歌搜索但没有得到我的解决方案。 我找到了类似的解决方案,但他们是用字符串来做的。可以用数组来完成吗?
int myCompare( int a, int b){
int ab= a.append(b);
int ba= b.append(a);
if(ab>ba){
return 1;
}else{
return 0;
}
}
void biggestnum(int arr[], int n){
if(n==0 || n==1){
return;
}
sort(arr,arr+n, myCompare);
for(int i=0;i<n;i++){
cout<<arr[i]<<" ";
}
cout<<endl;
}
所以如果给定的数组是{54, 546, 548, 60}; 结果应该是 6054854654.
标量基本类型int
没有方法。所以这些记录
a.append(b);
b.append(a);
无效。
好像是这样构造的
a.append(b)
您正在尝试将整数转换为 class 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';