请教关于pchar的小问题

gigi2000 2000-09-03 11:07:00
请问各位大虾,怎样循环读出pchar串中的每个字符?
也就是怎样像string[index]那样读?

例如:
var a:pchar;
i:integer;
begin
a:='abcdef';
for i:= 1 to 6 do
begin
分别读出a,b,c,d,e,f
end;
end;

请不吝赐教,小弟感激不敬!
...全文
188 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
tms2000 2000-09-13
  • 打赏
  • 举报
回复
var
a:pchar;
p:array[0..n] of char;
begin
strpcopy(p,a);
for i:=0 to n do
...
p[i]
end;
tms2000 2000-09-13
  • 打赏
  • 举报
回复
Var
a:Pchar;
i:integer;
begin
a:='abcdef';
for i:= 1 to StrLen(a)-1 do
Begin
ch:=Char(A^);
Inc(a);
End;

yeah 2000-09-07
  • 打赏
  • 举报
回复
这样做可以读出不定长度的PChar:
var P:Pchar;
i,j:Integer;
begin
P:='abcdefg';
i:=strlen(p);
for j:=0 to i-1 do
showmessage(P[j]);
end;
JGTM2000 2000-09-06
  • 打赏
  • 举报
回复
btw, 对于PChar和ShortString(not compatible to memory layout of PChar/LongString!),[index]的写法也是用指针。
JGTM2000 2000-09-06
  • 打赏
  • 举报
回复
用指针最高效,你不想用指针的话可以用copy(str,startpos,1),但对于很长的字串效率自然不好。所以,写这么一个函数吧:

function NthChar(s: PChar; index: cardinal): Char;
begin
if index > StrLen(s) then
raise ERangeError.Create('Index is out of range.');
Result:=(s+index)^; // index is 0 based
end;

测试代码:

procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
begin
try
for i :=0 to 10 do // will run out of range!
begin
ShowMessage(NthChar(PChar(Caption),0));
end;
except
On E: Exception do // but here we can intercept it
ShowMessage(E.Message);
end;
end;

PoolD 2000-09-05
  • 打赏
  • 举报
回复
var
a: pchar;
begin
a :='abcdefghijk';
showmessage(a[7]);
end;
freeman258 2000-09-04
  • 打赏
  • 举报
回复
var a: PChar
i: integer;
c: Char
begin
a := 'abcdef';
for i:=0 to 5 do
begin
c ;= (a+i)^;
//这想不出要单各字符能干吗?
end;
end;
LittleStar 2000-09-04
  • 打赏
  • 举报
回复
var a:pchar;
i:integer;
begin
a:='abcdef';
for i:= 1 to 6 do
begin
...:=a[i-1];
i:=i+1;
end;
end;

Putao 2000-09-03
  • 打赏
  • 举报
回复
转换为String速度会变慢?!
cheka 2000-09-03
  • 打赏
  • 举报
回复
x:=a[i]; 不可以么?

不行的话就 用x:=String(@a)[i];试试

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧