请问如何提取字符串。(5分)

  • 主题发起人 主题发起人 ggg
  • 开始时间 开始时间
G

ggg

Unregistered / Unconfirmed
GUEST, unregistred user!
有这样一条字符串:"我 是 中国人!".里面包含单字节空格

及双字节空格。请问如何编程将其单个提取出来。

如提取成:“我是中国人!”
 
我曾经写了个函数:
查找一字符串中的子字符串,并把以子字符串为分隔符的其它字符串放入TString中
function CheckSite(const Str, Ch: string; var Mystring: TStrings)
: boolean;
var
sit, n : integer;
S : string;
begin
Result := True;
S := Str;
n := Length(Ch);
while True do
begin
if Pos(Ch, S) = 0 then
begin
MyString.Add(S);
Break;
end;
sit := Pos(Ch, S);
MyString.Add(Copy(S, 1, sit - 1));
S := Trim(Copy(S, sit + n, Length(S)));
end;
if MyString.Count < 2 then Result := False;
end;

你可以这样做:
var
SL : TStrings;
MyStr : string;
i : integer;
begin
SL := TStringList.Create;
MyStr :='我 是 中国人';
CheckSite(MyStr, ' ', SL);
MyStr := '';
for i := 0 to SL.Count - 1 do
MyStr := MyStr + SL;//这就是你要的'我是中国人'
end;
 
看一下Delphi 都Pos函数的解释及例子,会有帮助的
 
把单字节空格删掉不就行了。
单字节空格的ascII码为32

 
简单,直接找出所有的空格,然后删除就行了:

s := '我 是 中国人!';
while pos(' ', s) <> 0 do
begin
p := pos(' ', s);
delete(s, p, 1);
end;
showmessage(s);//s = '我是中国人!'
 
sss:=stringreplace(sss,'单字节空格','',[rfreplaceall])
sss:=stringreplace(sss,'双字节空格','',[rfreplaceall])
 
方便的做法是将字符串转换成WideString,然后判断每个WideString数租单元(String类型)的长度.

var
S,C: String;
W: WideString;
i,
SingleChar, //单字节计数
DoubleChar: integer; //双字节计数
begin
SingleChar := 0;
DoubleChar := 0;
S := ":"我 是 中国人!";
W := WideString(S);
for i := 1 to Length(W) do
begin
C := String(W);
if Length(C) = 1 then
inc(SingleChar)
else
inc(DoubleChar);
end;
end;
 
s := '我 是 中国人!';
while pos(' ', s) <> 0 do
begin
p := pos(' ', s);
delete(s, p, 1);
end;

while pos(' ', s) <> 0 do
begin
p := pos(' ', s);
delete(s, p, 2);
end;

showmessage(s);//s = '我是中国人!


try it?!
 
处理双字节字符时不要用Pos,用AnsiPos或其它Ansi开头的函数

判断双字节字符也可以使用LeadBytes函数,代替高低位字节的判断。
 

Similar threads

回复
0
查看
861
不得闲
D
回复
0
查看
837
DelphiTeacher的专栏
D
后退
顶部