嘿伙计们,我有一个快速的问题,所以我可以说我有一个数组并打印出0000937
。是否可以将其变为0000739
?如果是这样,我该怎么做呢?谢谢你提前。
答案 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(不包括)。