-1

我创建函数来删除在 c++ 中相同的数组数据,因此使过程如下:

input:4
input:
25.50
64.25
64.25
25.50
output:
5.50
64.25

但是像这张图片的功能错误 在此处输入图像描述

这里的代码

#include <iostream>
using namespace std;
void removeSame(double a[int x]){
    int index[x];
    for(int z=0; z<x; z++){
        jum[z]=0;
        for(int c=0; c<x; c++){
            if(a[c]==a[z]){
                index[z]=c;   
            }   
        }   
    }
    for(int z=0; z<x; z++){
        if(z==index[z]){
            cout<<a[z]<<endl;
        }   
    }    
}
int main(){
    int n,x;
    cin>>n;
    double a[n];
    for(x=0; x<n; x++){
        cin>>a[x];   
    }
    removeSame(a[x]);
    return 0;
} 

然后当我像这样更改代码时,再次发生错误

void removeSame(double a[], int x){
...
} 

像这样的错误:

cannot convert 'double' to 'double*' for argument '1' to 'void hapusygsama(double*, int)'

请帮我

更新。谢谢所有回复我帖子的人

#include <iostream>
using namespace std;
void hapusygsama(double a[], int len){
    int index[len];
    for(int z=0; z<len; z++){
        for(int c=0; c<len; c++){
            if(a[c]==a[z]){
                index[z]=c;   
            }   
        }   
    }
    cout<<endl;
    for(int z=0; z<len; z++){
        if(z==index[z]){
            cout<<a[z]<<endl;;
        }   
    }
}
int main(){
    int n,x;
    cin>>n;
    double a[n];
    for(x=0; x<n; x++){
        cin>>a[x];   
    }
    hapusygsama(a, n);
    return 0;
} 
4

3 回答 3

1

您的代码是非法的 C++。C++ 目前不支持运行时数组。所有数组维度都必须包括常量边界。此外,C++ 不允许在参数中声明任何类型的大小,例如double a[int x]. 您必须将大小作为单独的参数传递。

于 2013-07-06T14:45:20.410 回答
0

您没有将参数正确传递给函数:

#include <iostream>
using namespace std;
void removeSame(double a[], int x){
    //                 ^^^
    int index[x];
    for(int z=0; z<x; z++){
        jum[z]=0;
        for(int c=0; c<x; c++){
            if(a[c]==a[z]){
                index[z]=c;   
            }   
        }   
    }
    for(int z=0; z<x; z++){
        if(z==index[z]){
            cout<<a[z]<<endl;
        }   
    }    
}
int main(){
    int n,x;
    cin>>n;
    double a[n];
    //     ^^^^  ERROR : not permitted, n is not a constant
    //                   it would not compile.
    for(x=0; x<n; x++){
        cin>>a[x];   
    }
    removeSame(a, x);
    //        ^^^
    return 0;
} 

您希望在 removeSame 中接收一个数组以删除相同的值。在您的代码中,您尝试double仅传递一个值。

正如我所说,它会编译,因为在函数中n声明时它不是常量。amain

编辑:似乎它是 gcc 中允许这种语法的扩展。但我建议使用更常见的东西......

你应该做 :

int main() {
    int n, x;
    cin >> n;
    double* a = new double[n];
    ...
    delete[] a;
    return 0;
}

在这种情况下,原型removeSame应该是:

void removeSame(double* a, int x);

最后一件事,你应该验证用户输入的值,开发中最重要的规则之一是:永远不要相信用户输入!

于 2013-07-06T14:43:25.343 回答
0

实现期望行为的一种非常优雅的方法是使用std::uniquestd::resize

代码将是:

int main() {
    std::vector<float> myvector;
    int n;
    cin >> n;
    float b;
    for (int i=0; i<n; i++){
        cin >> b;
        myvector.push_back(b);
    }
    std::sort(myvector.begin(), myvector.end());
    myvector.resize(std::distance(myvector.begin(),std::unique (myvector.begin(), myvector.end())));

return 0;
}

同样在您的问题中,您有输入浮点数,而对于您使用的代码int,我认为您也应该更改它。

于 2013-07-06T14:57:49.473 回答