字符串处理,理解问题能力超强的朋友请进! ( 积分: 200 )

  • 主题发起人 主题发起人 m911
  • 开始时间 开始时间
M

m911

Unregistered / Unconfirmed
GUEST, unregistred user!
有类似这样的字符串 F1836A8C, 想将其转换后 再 变换位置

1. 转换
每两个字符一组 即F1 83 6A 8C,将每组的个位和十位分别与对应的数字变化,表如下
个位对应表
0 = 9
1 = 8
2 = B
3 = A
4 = D
5 = C
6 = F
7 = E
8 = 1
9 = 0
A = 3
B = 2
C = 5
D = 4
E = 7
F = 6
十位对应表
8 = 0
9 = 1
A = 2
B = 3
C = 4
D = 5
E = 6
F = 7
0 = 8
1 = 9
2 = A
3 = B
4 = C
5 = D
6 = E
7 = F
(例子字符串换算后的数值应该是78 0A E3 05)

2.变换位置
如例子的字符串,将第一组和第四组互换位置,第二组和第三组互换位置
按例子中的字符串,从新排列后的位置应该是 05E30A78

我是新手,想求一个这样的函数,请贴代码,这个问题比较难理解,请多费心! 谢谢
 
这个问题好像别人问过的,可惜全文搜索不能用,其他地方应该有,搜一下吧
 
楼上这位仁兄的答案似乎适合任何一问题 [:D]
 
是给一个字符串然后转换吗?
 
俺说地是实话[:D]
 
function ChangeOne(c1:char):char;
begin
case c1 of
'0' : result := '9';
'1' : result := '8';
'2' : result := 'B';
'3' : result := 'A';
'4' : result := 'D';
'5' : result := 'C';
'6' : result := 'F';
'7' : result := 'E';
'8' : result := '1';
'9' : result := '0';
'A' : result := '3';
'B' : result := '2';
'C' : result := '5';
'D' : result := '4';
'E' : result := '7';
'F' : result := '6';
end;
end;

function ChangeTwo(c1:char):char;
begin
case c1 of
'0' : result := '8';
'1' : result := '9';
'2' : result := 'A';
'3' : result := 'B';
'4' : result := 'C';
'5' : result := 'D';
'6' : result := 'E';
'7' : result := 'F';
'8' : result := '0';
'9' : result := '1';
'A' : result := '2';
'B' : result := '3';
'C' : result := '4';
'D' : result := '5';
'E' : result := '6';
'F' : result := '7';
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
S1,S2: string;
i: integer;
begin
S1 := Edit1.text; // 界面 edit1.text := F1836A8C
S2 := '';
for i:=4 Downto 1 do
S2 := S2 + ChangeTwo(S1[i*2-1])+ ChangeOne(S1[i*2]);
Edit2.Text := S2;
end;
 
字符串的長度一定的偶數嗎, 如果不是, 單數放在最前還是最后, 按個位還是按十位轉.
 
procedure TForm1.BitBtn1Click(Sender: TObject);
var
i: Integer;
tmpStr, ResultStr: string;
const
LowCharChange: array[0..15] of Char = ('9','8','B','A','D','C','F','E','1','0','3','2','5','4','7','6');
HighCharChange: array[0..15] of Char = ('8','9','A','B','C','D','E','F','0','1','2','3','4','5','6','7');
function CharToID(AChar: Char): Integer;
begin
Result := -1;
if AChar in ['0'..'9'] then
Result := StrToInt(AChar)
else if AChar in ['A'..'F'] then
Result := Ord(AChar) - Ord('A') + 10;
end;
begin
tmpStr := 'F1836A8C';
ResultStr := '';
for i := 1 to Length(tmpStr) do
begin
if Odd(i) then
tmpStr := HighCharChange[CharToID(tmpStr)]
else tmpStr := LowCharChange[CharToID(tmpStr)];
end;
ResultStr := RightStr(tmpStr, 2) + Copy(tmpStr, 5, 2) + Copy(tmpStr, 3, 2) + LeftStr(tmpStr, 2);
ShowMessage(ResultStr);
end;
 
function blow(str:string):string
var
s,stemp1,stemp2,s1,s2:string;
i:integer;
begin
i:=1;
while i<=lenth(str)do
begin
stemp1:=copy(sr,i,1);
s1:=shiwei(stemp1);
stemp2:=copy(str,i+1,1);
s2:=gewei(stemp2);
s:=s+s1+s2;
i:=i+2
end;
result:=s;
end;
function shiwei(str:string):string
var ss:string;
begin
case str of
'0':ss:='9';
'1':ss:='8';
.
.
.
end;
result:=ss;
end;
function gewei(str:string):string
var sss:string;
begin
case str of
'0':sss:='8';
'1':sss:='9';
.
.
.
end;
result:=sss;
end;
换位置我建议用二维数组
 
后退
顶部