c++编译器报错[Error] conversion from 'std::string* {aka std::basic_string*}' to non-scalar type 'std::string {aka std::basic_string}' requested
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int n;
cin>>n;
double s[n];
string m[n];
for(int i=0; i<n; i++)
{
cin>>m[i]>>s[i];
}
for(int i=0; i<n-1; i++)
{
double k=i;
for(int j=i+1; j<n; j++)
{
if(m[j]=="male"&&m[k]=="male")
{
if(s[j]<s[k])
{
k=j;
}
}
else if(m[j]=="male"&&m[k]=="female")
{
k=j;
}
else if(m[j]=="female"&&m[k]=="female")
{
if(s[j]>s[k])
{
k=j;
}
}
}
if(k!=i)
{
swap(s[k],s[i]);
swap(m[k],m[i])
}
}
for(int i=0; i<n; i++)
{
cout<<fixed<<setprecision(2)<<s[i];
}
return 0;
}
8、9行声明数组个数不可以使用变量,可以考虑用动态分配
目前您使用的C++版本不能用变量开数组,如果题中给了 n ≤ 1000,那您可以开
double s[1010];// 比 n 的最大值多开 10,防止数组越界
string m[1010];
【以下回答由 GPT 生成】
这个错误是由于代码中的string m[n]
这一行出现的问题。
在C++中,数组的大小是在编译时期确定的,而不是运行时期确定的。而在标准的C++中,不允许使用变量来定义数组的大小。然而,一些编译器可能支持这个功能,但是可能会导致一些编译时错误。
在你的代码中,你使用了一个变量n
来定义数组string m[n]
的大小。这可能是导致编译错误的原因。
要解决这个问题,你可以使用动态内存分配来替代数组的定义。具体步骤如下:
string m[n];
改为string* m = new string[n];
。这样就使用new
运算符在堆上分配了一个n
个元素的string
数组。delete[]
运算符来释放内存,防止内存泄漏。所以在return 0;
之前添加delete[] m;
。下面是修改后的代码:
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int n;
cin >> n;
double s[n];
string* m = new string[n]; // 使用动态内存分配
for(int i=0; i<n; i++)
{
cin >> m[i] >> s[i];
}
for(int i=0; i<n-1; i++)
{
double k=i;
for(int j=i+1; j<n; j++)
{
if(m[j]=="male" && m[k]=="male")
{
if(s[j]<s[k])
{
k=j;
}
}
else if(m[j]=="male" && m[k]=="female")
{
k=j;
}
else if(m[j]=="female" && m[k]=="female")
{
if(s[j]>s[k])
{
k=j;
}
}
}
if(k!=i)
{
swap(s[k],s[i]);
swap(m[k],m[i]);
}
}
for(int i=0; i<n; i++)
{
cout << fixed << setprecision(2) << s[i] << " "; // 添加空格,便于输出
}
delete[] m; // 释放内存
return 0;
}
这样,你应该就可以解决这个编译错误了。希望对你有帮助!如果还有其他问题,请随时提问。