怎样在串中快速的取得第N到第N+1个*之间的字符子串----在线等待
有一个string类型的变量,长度约几千,其值中包含多个'*',如:as11*aaa*qq*dff*zzz*5*,怎样快速的取得第N到第N+1个*之间的字符串呢? 问题点数:0、回复次数:4Top
1 楼aiirii(ari-http://spaces.msn.com/members/aiirii/)回复于 2003-11-01 12:25:01 得分 0
用 StrLCopy 就可!!!
function StrLCopy(Dest: PChar; const Source: PChar; MaxLen: Cardinal): PChar;Top
2 楼prettysky(浪际天涯)回复于 2003-11-01 15:32:26 得分 0
先取得*的位置,然后Copy两个*中间的字符。
去的*的位置可以用那个asin什么的函数。。记不清了。copy就用copy();Top
3 楼aiirii(ari-http://spaces.msn.com/members/aiirii/)回复于 2003-11-01 15:39:26 得分 0
如也可! s := Copy('as11*aaa*qq*dff*zzz*5*', 3, 3);Top
4 楼deanchang(鱼)回复于 2003-11-01 16:39:18 得分 0
除了二楼理解了楼主的意思,其他都是来混分的,今天心情较好,替楼主写个取第N个和第N+1个特殊符号(包括'*'号)之间字符的类,希望楼主和大家一起加油进步.
================================================================================类
...
Type
TGetStr = class
private
Stn_Pos,Len_Str:integer;PushedStr,PopStr:string;
public
function GetString():string;//返第Stnp到Stnp+1个特殊符号之间的字符
procedure PopString(PopS:string);//PopS是当处理完原字符串后,将字符串还原到哪
constructor Create(Stnp:integer;SourceStr:string);
//构造函数,定义要从SourceStr中的第Stnp个特殊符号(包括*号)开始取数
end;
...
=========================================================================实现+例程
unit Unit1;
interface
uses
Windows, Forms,Dialogs,StrUtils, StdCtrls, Classes, Controls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
TGetStr = class
private
Stn_Pos,Len_Str:integer;PushedStr,PopStr:string;
public
function GetString():string;
procedure PopString(PopS:string);
constructor Create(Stnp:integer;SourceStr:string);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
constructor TGetStr.Create(Stnp:integer;SourceStr:string);
begin
PushedStr:=SourceStr;
Len_Str:=Length(SourceStr);
Stn_Pos:=Stnp;
end;
function TGetStr.GetString():string;
var
Position:integer;
begin
PopStr:=PushedStr;
Position:=Pos('*',PushedStr);
while Position >0 do
begin
Stn_Pos:=Stn_Pos-1;
PushedStr[Position]:='0';
if Stn_Pos = 0 then
begin
Result:=MidBStr(PushedStr,Position+1,Pos('*',PushedStr)-Position-1);
Exit;
end;
Position:=Pos('*',PushedStr);
end;
end;
procedure TGetStr.PopString(PopS:string);
begin
Pops:=PopStr;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
TestStr:string;
ResultStr:string;
GetS:TGetStr;
begin
TestStr:='*4329*fjdslajfd*f98724rkjfdlksaj*jgdlf*gfd*fsda*';
GetS:=TgetStr.Create(3,TestStr);
ResultStr:=GetS.GetString();
GetS.PopString(TestStr);
GetS.Free;
showmessage(ResultStr);
end;
end.
事实上要实现该功能是很简单的,被我搞得这么复杂,是希望大家争做程序员,别做程序工人.
如果能完全理解上述程序的话,恭喜你,你程序设计算是入门汉了.
(PS:这只是个基础类,当且仅当你要处理的字符串全是英文字符时,如果你字符串里有中文字符的话,这个类需要改进才行,具体实现交给大家发挥了).Top




