如何翻转数组中的某些数字

时间:2014-01-18 00:47:41

标签: c++ arrays

嘿伙计们,我有一个快速的问题,所以我可以说我有一个数组并打印出0000937。是否可以将其变为0000739?如果是这样,我该怎么做呢?谢谢你提前。

3 个答案:

答案 0 :(得分:1)

这个想法是让计数器向后计数,从数组的末尾开始计算第j个数字。你将跳过零(实际上将它们放在newArray中),然后放置最后的第j个数字。

int main()
{

    int a[] = {0, 0, 0, 0, 9, 3, 7};    
    int newArray [(sizeof(a)/sizeof(*a))];
    int j = 0;
    for(int i=0; i<(sizeof(a)/sizeof(*a)); i++){ 
        if(a[i]==0) 
            newArray[i]=0; //if the current value is 0, place it as it is
        else{ 
            newArray[i]=a[(sizeof(a)/sizeof(*a))-1-j]; 
            j++; 
        }
    }


    for(int i=0; i<(sizeof(a)/sizeof(*a)); i++){
        cout << a[i];
    }    
        cout << "\n";

    for(int i=0; i<(sizeof(newArray)/sizeof(*newArray)); i++){
        cout << newArray[i];
    }
   return 0;
}

答案 1 :(得分:0)

如果我理解正确,你需要从第一个非sezo元素开始反转数组的元素。可以使用标准算法简单地完成任务。例如

#include <iostream>
#include <algorithm>
#include <iterator>
#include <functional>

int main()
{
   int a[] = { 0, 0, 0, 0, 9, 3, 7 };

   for ( int x : a ) std::cout << x << ' ';
   std::cout << std::endl;

   std::reverse( 
      std::find_if( std::begin( a ), std::end( a ), std::bind2nd( std::not_equal_to<int>(), 0 ) ),
      std::end( a ) );

   for ( int x : a ) std::cout << x << ' ';
   std::cout << std::endl;
} 

或者如果你需要尊重由零元素包围的范围的元素,那么你可以应用相同的方法,但是你需要在循环中使用fand非零元素集。我的意思是以下

001200045600

结果是

002100065400

答案 2 :(得分:0)

只需使用STD :: reverse:

的std ::反向(ARR + 4,ARR + 7);

这会将索引4(含)的内容转换为索引7(不包括)。