太简单的问题!!!(15分)

  • 主题发起人 主题发起人 尘土飞扬
  • 开始时间 开始时间

尘土飞扬

Unregistered / Unconfirmed
GUEST, unregistred user!
一个字符串转换的问题。
为什么有一句实现不了??
procedure TForm1.Button1Click(Sender: TObject);
var
s,s1:string;
begin
s:='基本信息|姓名,100,cxm:基本信息|性别,80,cxb:基本信息|年龄,80,nll:地址,200,caddr:工作单位,210,czzdw';
s1:=stringreplace(s,':基本信息|',';',[rfReplaceAll]);
//将所有的 ':基本信息|' 替换成 ';'
s1:=stringreplace(s1,'|','(',[rfReplaceAll]);
s1:=stringreplace(s1,':',')',[rfReplaceAll]);
//请问上一句为什么不能实现????‘)’为什么代替不了‘:’
showmessage(s1);
end;
 
:和:是不同的东西。
 
是不是全角和半角的问题?
 
你好粗心,
注意:前面的s字符串中的冒号为全角,最后一句的s1替换语句中的冒号为半角!
 
把输入法关掉。
 
将符号全换为半角!
 
全角半角的问题!
 
多人接受答案了。
 
本人编了一个全角转半角的函数,一起共享。
function SbctoDbc(s:string):string;
var
nlength,i:integer;
str,ctmp,c1,c2:string;
{
在windows中,中文和全角字符都占两个字节,
并且使用了ascii chart 2 (codes 128–255)。
全角字符的第一个字节总是被置为163,
而第二个字节则是相同半角字符码加上128(不包括空格)。
如半角a为65,则全角a则是163(第一个字节)、193(第二个字节,128+65)。
而对于中文来讲,它的第一个字节被置为大于163,(
如'阿'为:176 162),我们可以在检测到中文时不进行转换。
}
begin
nlength:=length(s);
if (nlength=0) then
exit;
str:='';
setlength(ctmp,nlength+1);
ctmp:=s;
i:=1;
while (i<=nlength) do
begin
c1:=ctmp;
c2:=ctmp[i+1];
if (c1=#163) then
//如果是全角字符
begin
str:=str+chr(ord(c2[1])-128);
inc(i,2);
continue;
end;
if (c1>#163) then
//如果是汉字
begin
str:=str+c1;
str:=str+c2;
inc(i,2);
continue;
end;
if (c1=#161) and (c2=#161) then
//如果是全角空格
begin
str:=str+' ';
inc(i,2);
continue;
end;

str:=str+c1;
inc(i);
end;
result:=str;
end;
 
后退
顶部