在Edit中有一行汉字:中华人民共和国。我想把它逆序显示成:国和共民人华中。怎么做呢?
注意:是汉字,不是英文和数字。
注意:是汉字,不是英文和数字。
解决方案 »
- 如何判断tclientdataset中哪个字段是主键?
- quick report中有没有像DBGrid一样的控件啊?
- 16进制转换方式?
- 求教条码打印问题
- 求多线程存取记录的算法
- 关于程序编译
- 在保存对话框中怎样使文件扩展名随类型变化而改变?
- 我把文件夹内所有文本文件都添加到列表框里,然后用循环语句逐个把列表框里每一个的内容都写到RichEdit组件中显示,却失败了
- 猛料--》真猛,大家猛才是真的猛!得到好东西一定要算散分!
- 关于DELPHI单元SHAREMEM的问题
- 关于接收其他IP传到本地某端口上的数据的问题(delphi)
- 在局域网内能通过计算机名与IP互相访问,但是PING不通(防火墙之类的就不用考虑了)
var
I: Integer;
P: PChar;
begin
SetLength(Result, Length(AText));
P := PChar(Result);
I := Length(AText)-1;
while I > 0 do
begin
P^ := AText[I];
Inc(P);
P^ := AText[I+1];
Inc(P);
Dec(I, 2);
end;
end;
var i,o:Integer;
begin
o:=iStart;
while iStart<Length(str) do
begin
if Word(str[iStart])>$100 then break;
Inc(iStart);
end;
i:=iStart;
Result:=False;
while i<Length(str) do
begin
if Word(str[i])<$100 then
break;
Inc(i);
Result:=True;
end;
if not Result then
begin
iLength:=0;
iStart:=o;
end
else
iLength:=i-iStart+1;
end;
procedure RevStr(var str:WideString;iStart,iLength:Integer);
var i:Integer;c:WideChar;
begin
for i := 0 to (iLength -1) div 2 do
begin
c:=str[iStart+i];
str[iStart+i]:=str[iStart+iLength-i-1];
str[iStart+iLength-i-1]:=c;
end;
end;
function RevDBCS(str:WideString):WideString;
var iStart,iLength:Integer;
begin
iStart:=1;
while FindSubDBCS(str,iStart,iLength) do
begin
RevStr(str,iStart,ilength);
Inc(iStart,iLength);
end;
Result:=str;
end;
使用RevDBCS
输出:abcde国和共民人华中fg国和共民人华中全部反序也不用如一楼那样,直接调用StrUtils.ReverseString就可以了
var
I: Integer;
p : PWideChar ;
begin
SetLength(Result, Length(AText));
P := PWideChar(Result);
for I := Length(AText) downto 1 do
begin
P^ := AText[I];
Inc(P);
end;
end;procedure TForm1.Button1Click(Sender: TObject);
var
a : WideString;
begin
edit1.Text := '中华人民共和国';
a := Edit1.Text;Edit1.Text := ReversewString(a);
end;
…………
for I := Length(AText) downto 1 do
begin
P^ := AText[I];
Inc(P);
end;
…………
其中Inc(P)是什么意思?每循环一次就增加p个???。我想应该是从最后一个汉字开始,每循环一次就去掉一个汉字吧。不好意思,没看明白你的思路,能说一下你的算法步骤吗?还有lexchou(龍子龍孫)(本人已死)(有事烧纸)以及各位!
var
I: Integer;
P: PWideChar;
begin
SetLength(Result, Length(AText));
P := PWideChar(Result);
for I := Length(AText) downto 1 do
begin
P^ := AText[I];
Inc(P);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
//
ShowMessage(ReverseWideString(Edit1.Text));
end;
汉字是占2个char的大小,要想不出现半个汉字,是要靠WideChar来决定移位的,所以在上述中使用了WideChar
结帖,给分!