C++ 此代码必须打印索引位置数组,但它不打印任何内容

C++ 此代码必须打印索引位置数组,但它不打印任何内容,c++,C++,这是一个完整的问题:- 数组的所有索引 给您一个数字n,表示元素的计数 给你n个数字 给你一个数字x 您需要找到数组a中x出现的所有索引 返回一个适当大小的数组,该数组包含数组a中x出现的所有索引 样本输入 6. 15 11 40 4. 4. 九, 样本输出 3. 四, 这是我的代码:- #include<iostream> using namespace std; int* allIndices(int arr[],int n,int x,int idx,int* fsf){

这是一个完整的问题:- 数组的所有索引

  • 给您一个数字n,表示元素的计数
  • 给你n个数字
  • 给你一个数字x
  • 您需要找到数组a中x出现的所有索引
  • 返回一个适当大小的数组,该数组包含数组a中x出现的所有索引
  • 样本输入 6. 15 11 40 4. 4. 九,

    样本输出 3. 四,

    这是我的代码:-

    #include<iostream>
    using namespace std;
    int* allIndices(int arr[],int n,int x,int idx,int* fsf){
        if(idx==n){
            int *q=new int[*fsf];
            return q;
        }
        if(arr[idx]==x){
            
            int* iarr=allIndices(arr,n,x,idx+1,fsf+1);
            iarr[*fsf]=idx;
            return iarr;
            
        }
        else{
            int* iarr=allIndices(arr,n,x,idx+1,fsf);
            return iarr;
        }
    }
    int main(){
        int n;
        cin>>n;
        int *p = new int[n];
        for(int i=0;i<n;i++)
        cin>>p[i];
        int x;
        cin>>x;
        int k=0;
        int *y=allIndices(p,n,x,0,&k);
        for(int i=0;i<k;i++){
            cout<<y[i]<<endl;
        }
    }
    
    #包括
    使用名称空间std;
    int*allIndices(int arr[],int n,int x,int idx,int*fsf){
    如果(idx==n){
    int*q=新的int[*fsf];
    返回q;
    }
    如果(arr[idx]==x){
    int*iarr=所有属性(arr、n、x、idx+1、fsf+1);
    iarr[*fsf]=idx;
    返回iarr;
    }
    否则{
    int*iarr=所有属性(arr,n,x,idx+1,fsf);
    返回iarr;
    }
    }
    int main(){
    int n;
    cin>>n;
    int*p=新的int[n];
    对于(int i=0;i>p[i];
    int x;
    cin>>x;
    int k=0;
    int*y=allIndices(p、n、x、0和k);
    
    对于(inti=0;i你有
    k=0
    ,然后你在循环头中有
    i=0
    ,然后你有条件
    i,这做得很好。你可能有点太复杂了

      #include <iostream>
    
    using namespace std;
    
    int* alLIndices(int arr[], int n, int x){
        int *y = new int[n];
        for(int i=0; i<n; i++){
            if(arr[i] == x){
                y[i] = i;
            }
        }
        cout<<"Number "<<x<<" occurs at indices: "<<endl;
        for(int i=0; i<n; i++){
            cout<<y[i]<<endl;
        }
    }
    
    
    int main() {
    
        int n;
        cout<<"Enter n: ";
        cin>>n;
        int *p = new int[n];
        cout<<"Enter an array of numbers: "<<endl;
        for(int i=0; i<n; i++)
            cin>>p[i];
        int x;
        cout<<"Enter x: ";
        cin>>x;
    
        alLIndices(p, n, x);
    
        return 0;
    }
    
    #包括
    使用名称空间std;
    整数*所有标识(整数arr[],整数n,整数x){
    int*y=新的int[n];
    
    对于(int i=0;iIs),您有什么具体问题吗?请提出好的问题。您将整数作为指针传递(&k->fsf),但随后传递“指针+1”!这不起作用。您希望k的值会改变,但*fsf永远不会改变。传递fsf作为引用而不是指针会更简单吗?此外,这可能是一个练习,您的老师可能不同意,但使用std::vector比使用动态数组简单得多。在小练习,但不删除分配给new的内存会造成内存泄漏,这是一个坏习惯。谢谢,修复了itI已在函数中传递了k变量的引用,因此allindices函数中创建的更改不会反映在main中,您能建议我如何修复吗it@vedantagarwal试着打印k在循环之前,看。它给出0,但我找不到修复的方法it@vedantagarwal等一下,我会编辑一个解释。@vedantagarwal注意,
    allIndicies
    不会修改
    fsf
    的基本值。您好@a\u Mel,实际上我在学习递归,所以我只想递归解决我的问题,而且我还找到了一个so对此我有点怀疑,但我对这段代码还是有点怀疑。我明白了。youtube上有一段很棒的递归视频。它可能会对你有所帮助。似乎不允许外部链接。只需搜索“解决任何递归问题的5个简单步骤”
    int* iarr = allIndices(arr, n, x, idx+1, fsf+1);
    
      #include <iostream>
    
    using namespace std;
    
    int* alLIndices(int arr[], int n, int x){
        int *y = new int[n];
        for(int i=0; i<n; i++){
            if(arr[i] == x){
                y[i] = i;
            }
        }
        cout<<"Number "<<x<<" occurs at indices: "<<endl;
        for(int i=0; i<n; i++){
            cout<<y[i]<<endl;
        }
    }
    
    
    int main() {
    
        int n;
        cout<<"Enter n: ";
        cin>>n;
        int *p = new int[n];
        cout<<"Enter an array of numbers: "<<endl;
        for(int i=0; i<n; i++)
            cin>>p[i];
        int x;
        cout<<"Enter x: ";
        cin>>x;
    
        alLIndices(p, n, x);
    
        return 0;
    }