一个数组,要求从可以从任何一个值开始,把这个值跟它后面的数组值放到数组的开始。形成循环
。如:
array1[0]:='0';
array1[1]:='1';
array1[2]:='2';
array1[3]:='3';
array1[4]:='4';
array1[5]:='5';
array1[6]:='6';假设我要把数组中的值为‘2’向前移动到数组开头。数组结果应该是:'2','3','4','5','6','0','1'
.
如何把以上情况归纳并写成代码?
。如:
array1[0]:='0';
array1[1]:='1';
array1[2]:='2';
array1[3]:='3';
array1[4]:='4';
array1[5]:='5';
array1[6]:='6';假设我要把数组中的值为‘2’向前移动到数组开头。数组结果应该是:'2','3','4','5','6','0','1'
.
如何把以上情况归纳并写成代码?
解决方案 »
- 有人尝试过 delphi 2007 了吗?谈谈感受
- 这个SQL语句怎么写?在线等...
- adoquery帅选中怎样用大于或小于的参数,急,高分相送
- 主从表结构中,主表和从表通过一id号关联,如果主表改变了原来已有记录的id号,那么从表的id号如何才能合理地更新为新的id号?
- delphi列表框比较
- 找不到第一条记录!!
- 程序员的心路历程 李维读“>”有感。
- TWebBrowser的问题,急,知道的说一说
- 高手挑站:菜鸟大放100分,如何在自己已有的特色上再继承其它FORM,使得在设计期间,就可看到被继承窗体的控件?
- 查询结果显示格式定义怎么设置呀?即把select查询的数据0.250000显示成25%或者1/4 的问题
- 局域网中判断计算机是否正运行
- 逐条处理200万条记录,什么方法较好?
temp:string;
y,x:integer;
array1:array[1..6]of string;begin
array1[0]:='0';
array1[1]:='1';
array1[2]:='2';
array1[3]:='3';
array1[4]:='4';
array1[5]:='5';
array1[6]:='6';
for y:=0 to 2 do
temp:=array1[0];
for x:=0 to 6 do
array1[x]:=array1[x+1]
array1[6]=temp;//没有试过,不知行不行...
var
temp:string;
y,x:integer;
array1:array[0..6]of string;
begin
array1[0]:='0';
array1[1]:='1';
array1[2]:='2';
array1[3]:='3';
array1[4]:='4';
array1[5]:='5';
array1[6]:='6';
for y:=1 to 2 do
begin
temp:=array1[0];
for x:=0 to 6 do
array1[x]:=array1[x+1];
array1[6]:=temp;
end;
label1.caption:=array1[0];
label2.caption:=array1[1];
label3.caption:=array1[2];
label4.caption:=array1[3];
label5.caption:=array1[4];
label6.caption:=array1[5];
label7.caption:=array1[6];
end;~~~~~~~~~~~~~~~~~~~~~~~结果是:
2,3,4,5,6,0,1
一般的办法:var s1,s2:array[0..4] of integer;
i:integer;
begin
s1[0]:=1;
s1[1]:=2;
s1[2]:=3;
s1[3]:=4;
s1[4]:=5; s2[0]:=6;
s2[1]:=7;
s2[2]:=8;
s2[3]:=9;
s2[4]:=0;
for a:=0 to 4 do s1[a]:=s2[a];
end;用movemeory的办法:var s1,s2:array[0..4] of integer;
i:integer;
begin
s1[0]:=1;
s1[1]:=2;
s1[2]:=3;
s1[3]:=4;
s1[4]:=5; s2[0]:=6;
s2[1]:=7;
s2[2]:=8;
s2[3]:=9;
s2[4]:=0;
for i:=0 to 4 do showmessage('s1的'+inttostr(i)+':'+inttostr(s1[i]));
showmessage('movemeory1!');
windows.MoveMemory(@s1,@s2,sizeof(s1)); for i:=0 to 4 do showmessage('s1的'+inttostr(i)+':'+inttostr(s1[i]));
先弄一个临时变量,然后逐个前移,可以用循环实现,循环次数就是要移到array1[0]的值(比如这里是'2'),当然只针对楼主的例子有效
上班中,不写代码了(偷笑,呵呵)
循环里这样写
tmpstr:=array1[0];
array1[i]:=array1[i+1];
array[6]:=tmpstr;
VAR
I,j:INTEGER;
TEMP:INTEGER;
Splitpos:integer;
uplen,downlen:integer;
Dest:array [0..6] of string;
FUNCTION POSTION(CONST value:string):iNTEGER;
BEGIN
FOR Result:=LOW(S) TO HIGH(S) DO
if s[Result]=value then Exit;
Result:=-1;
END;begin
uplen:=Postion(value)+1;
if uplen=0 then Exit;
Downlen:=length(s)-uplen; for i:=0 to downlen do
dest[i]:=S[uplen+i-1]; for i:=downlen+1 to length(dest)-1 do
dest[i]:=s[i-downlen-1]; for i:=0 to High(dest) do
Outputdebugstring(pchar(dest[i]));
end;
//参数:ArrVal:就是某个在数组中的值。arrray1:数组
//返回:-1:数组中没有这个值,1:有。
function GetArrayByVal(ArrVal:string;Var array1:array of string):integer;
Var
temp:string;
i,y,x:Integer;
StartPos:integer;
begin
Result:=-1;
StartPos:=0;
//假设没有重复值,找到值的位置
for i:=Low(array1) to High(array1) do
begin
if array1[i]=ArrVal then
begin
StartPos:=i;
Result:=1;
Break;
end;
end; if Result=-1 then
begin
exit;
end;
for y:=1 to StartPos do
begin
Temp:=array1[0];
For X:=Low(array1) to High(array1) do
begin
array1[x]:=array1[X+1];
end;
array1[High(array1)]:=temp;
end;
end;根据我的例子的要求:
arrVal:='2'
GetArrayByVal(arrVal,array1);
得到的就是我想要的。然后还可以随便改arrVal,array1的值。这个通用性也是我想要的
谢谢大家
谢谢大家。
新年前一天解决一个问题,太爽了,明年我要发财了!大家也发财!
Happy New Year!
Happy New Year!