使用C ++进行数组压缩和搜索(基础知识)

时间:2016-11-22 12:37:45

标签: c++ arrays module

所以我需要20个元素的数组帮助。

我需要找到每个元素的绝对值,如果它的值小于1,则从数组中删除该元素。然后在数组末尾放0代替被删除的元素。

所以我正在寻找一些可以帮助我做到这一点的功能。

这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>



int OddSumm(int arr[], int lenght)
{   
    int i,p,z;
    p=0;        
    for (i=0; i<lenght; i++)
        if(arr[i]%2!=0 && arr[i]!=0 ){
            p+=arr[i];
        }   
    return p;
}

int SummBetweenNegativeNumbers(int arr[], int lenght) {
    int s,i,r,z;
    s=0;    

    for (i=0; i<lenght; i++)
        if(arr[i]<0){
            i++;
           r=i;
           for (i=r; i<lenght; i++)
           if(arr[i]<0){
           --i;
           z=i; 
             for (i=r; i<=z; i++)
            s+=arr[i];

}
}
    return s;
}

int main(int argc, char *argv[])
{
    int var;
    int i,arr[20];
    int s,p,lenght;
    lenght=20;


    {
        printf("Type in  %d elements \n",lenght);
            for (i=0; i<lenght; i++)
                scanf("%d", &arr[i]);
    }

    p=OddSumm(arr,lenght);
    s=SummBetweenNegativeNumbers(arr,lenght);

    printf("\n\t 1a)Odd numbers summ: %d",p);
    printf("\n\t 1b)Elements summ between negativ numbers: %d", s);
    printf("\n\t 2)Compressed array: ");
        for(i=lenght-1; i>=0; i--)
            printf(" %d",arr[i]);
        printf("\n\n");
    system("pause");


return 0;   
}

1 个答案:

答案 0 :(得分:2)

  1. 使用std::transform转换您的数据
  2. 使用std::remove压缩这些非零
  3. 使用std::fill填充填充零
  4. 示例代码

    #include <vector>
    #include <cstdlib>
    #include <iterator>
    #include <algorithm>
    #include <iostream>
    
    int my_function(int value){
       value = std::abs(value);
       return value<1 ? 0:value;
    }
    
    int main()
    {
        int v[]={0,1,2,-4,-5,3};
        std::transform(std::begin(v),std::end(v),std::begin(v),my_function);
        auto end=std::remove(std::begin(v),std::end(v),0);
        std::fill(end,std::end(v),0);
        for(auto value : v)std::cout<<value<<' ';
    }