注册 登录
编程论坛 C++教室

[求助3]指针,看下哪错了

a8451727 发布于 2007-07-30 15:45, 421 次点击

有N个数,移动M个数放到后面: 2 3 4 5 6 7 8 9---> 5 6 7 8 9 2 3 4

为什么我能把前面的移到后面,后面的移到前面却出错呢?

#include<iostream>
using namespace std;
const int max=10;
const int n=4;

int main()
{
void sort(int *p,int s);
int a[max];
int *p=a;
int j=5;

for(p=a;p<(a+max);p++){
j++;
*p=j;
}
for(p=a;p<(a+max);){
cout<<*p++<<' ';
}
cout<<endl;
sort(a,n);
return 0;
}

void sort(int *p,int s)
{
int i,j;

int a[max];
int a1[n],
a2[max-n];
int *array=a,
*array1=a1,
*array2=a2;

for(j=s;j<max;j++){
*(array2+j)=*(p+j);
}

for(i=0;i<max-s;i++){
*(array+i)=*(array2+i); //这里是移动后面到前面的,哪出错了?
}
//******************************
for(i=0;i<s;i++){
*(array1+i)=*(p+i);
}

for(i=max-s,j=0;i<max,j<s;i++,j++){ //前面的移到后面却行呢?
*(array+i)=*(array1+j);
}

for(array=a;array<(a+max);array++){
cout<<*array<<' ';
}
cout<<endl;
}

4 回复
#2
virusswb2007-07-30 16:07

你的我看不明白,我的思路是,你要重新建立一个数组,暂时存放前面的,然后把后面的放入前面,在把临时的放入后面,这样应该可以。

#3
virusswb2007-07-30 16:09
for(j=s;j<max;j++){
*(array2+j)=*(p+j);
}
这里是不是就出问题了,是不是逻辑问题啊
#4
a84517272007-07-30 16:18
以下是引用virusswb在2007-7-30 16:07:10的发言:

你的我看不明白,我的思路是,你要重新建立一个数组,暂时存放前面的,然后把后面的放入前面,在把临时的放入后面,这样应该可以。

我的思路也是啊

a2 a1分别放在a的前后

#5
a84517272007-07-30 16:24
以下是引用virusswb在2007-7-30 16:09:24的发言:
for(j=s;j<max;j++){
*(array2+j)=*(p+j);
}
这里是不是就出问题了,是不是逻辑问题啊

哈哈哈,谢谢提醒,是这错了,是这样的:
for(i=0,j=s;i<max-s,j<max;i++,j++){
*(array2+i)=*(p+j);
}

for(i=0;i<max-s;i++){
*(array+i)=*(array2+i);
}

1