请教单引号(')的使用(0分)

  • 主题发起人 主题发起人 ttaa
  • 开始时间 开始时间
T

ttaa

Unregistered / Unconfirmed
GUEST, unregistred user!
我查看过很多关于单引号的使用问答。但还不太懂。
而且也没分了,大虾们义务一下吧。

引号(')在delphi中经常用到。
会使用,应该很好用。
但我还不会,所以很难用,所以也就需要高手指点。
我在表框中放置了一个TMemo,TEdit,TBotton,
Edit1中输入abcd。

procedure TForm1.Button1Click(Sender: TObject);
Var
str:String;
begin
//1
str:='name=' + edit1.Text;
Memo1.Lines.Add('1 : '+str);
//2
str:='name=' + ''+Edit1.Text+'';
Memo1.Lines.Add('2 : '+str);
//3
str:='name=' + 'Edit1.Text';
Memo1.Lines.Add('3 : '+str);
//4
str:='name=' + '''Edit1.Text''';
Memo1.Lines.Add('4 : '+str);
//5
str:='name=' + #39 + Edit1.Text + #39;
Memo1.Lines.Add('5 : '+str);
//6
str:='name=''' + Edit1.Text + '''';
Memo1.Lines.Add('6 : '+str);
//7
str:='name=' + ''''+Edit1.Text+'''';
Memo1.Lines.Add('7 : '+str);

//8
str:='name='+'''+Edit1.Text+''';
Memo1.Lines.Add('8 : '+str);

//str:='name'+''Edit1.Text''; //Wrong
//str:='name'+''''Edit1.Text''''; //Wrong
Memo1.Lines.Add(' ') ;
end;

运行结果如下:
1 : name=abcd
2 : name=abcd
3 : name=Edit1.Text
4 : name='Edit1.Text'
5 : name='abcd'
6 : name='abcd'
7 : name='abcd'
8 : name='+Edit1.Text+'
请教:
//1,//3,//5。都很好理解,没疑问。
其他的,就不大明白了。
就拿//6来说, str:='name=''' + Edit1.Text + '''';
总共有8个单引号,哪个跟哪个配成一对啊?
 
不是匹配的问题,
'''在这里只代表一个',因为前面有一个'
 
字符串中,''只代表一个'
因为'是字符串标识符,而你在字符串中要用到这个字符,
就必须在前面加一个用来转义的'
就象C中,你的字符串中出现了/,就必须用两个/来表示
比如"test//haha"实际就表示test/haha
 
楼上两位,
dreamliu2001说 : '''在这里只代表一个'
twos说 : ''只代表一个'
会不会矛盾啊?我也看过以前的帖子也有说:''''只代表一个'。
那岂不是'',''','''',都可以代表一个'?
有帖子说:引号必须是成队出现的。
str:='name=''' + Edit1.Text + ''''
那里是成对的?那里用是转义?因该有一定的规律的。
 
2.''表示空。
4.'''fhsjdfhjsdf'''第一个和最后一个是一对,第二、第三表示一个单引号,第四、第五
表示一个单引号。
6.跟4是一样的,''''中间两个表示一个单引号。
7.也是一样。
8.也是一样,在电脑看来,str:='name='+'''+Edit1.Text+'''中+Edit1.Text+是个字符串。
其实问题很简单:
在两个单引号内,两个挨着的单引号表示一个单引号,匹配关系自己查一下。弄错了,
就象你后面的wrong。
 
to :wp_hammer,讲番声多谢先。
既然2中的''可表示空,那可不可以理解成'''表示一个',''''表示两个''。

你说的:(4.'''fhsjdfhjsdf'''第一个和最后一个是一对,第二、第三表示一个单引号,第四、第五
表示一个单引号。)怎么不理解成左边一个单引号,右边一个点引号?

我好像会用,但不理解。
 
帮你理一下,
''表示一个单引号字符!
所以'''表示一个'的说法是错的,
'是作为字符串的标识的,所以对于一个字符串来讲,
必须以'开始和结束,比如s:='aaaa';
我想这个很容易理解,那么我们再来看一下,如果
这个字符串的内容是aa'aa,应该怎么表示?
s:='aa''aa';
我们来模拟一下编译器对这个语句的扫描过程,
首先,发现一个单引号,而且后面的一个字符不是
单引号,于是记录字符串开始了,然后,又扫描到
一个单引号,继续扫描,后面一个还是单引号,于是,
编译器记录下一个单引号字符,继续扫描,又遇到一个
单引号,但后面一个字符已经不是单引号了,于是,
编译器记录下字符串结束.

你用上面的分析来看看4,就会很清楚了.
 
计算机的理解应该是这样的,遇到第一个单引号找与它匹配的单引号,发现第二个,
看它后面紧接着有没有单引号,没有则找到表示空,有则认为2、3是一个“单引号”,
“单引号”是字符,继续寻找与第一个匹配的单引号........直到找到,再发现第一个
单引号...................
 
各位说的好像都有道理,可是太乱,我也来理一下(同意小猪的观点):
1.其实很简单的,s:='aaaa'得出结果s:=aaaa,这都可理解。
2.s:='''aaaa'''得出结果s:='aaaa'是为什么呢,因为在delphi中两个单引号表示一个'字符,
所以s:='aa''aa'就得出结果s:=aa'aa。
3.计算机是怎么执行的呢,请见如下:遇到第一个单引号找与它匹配的单引号,发现第二个,
看它后面紧接着有没有单引号,没有则找到表示空,有则认为2、3是一个“单引号”,
“单引号”是字符,继续寻找与第一个匹配的单引号........直到找到,再发现第一个
单引号...................
 
补充一下,可能编译器实际上处理字符串时不一定是按照我描述
的流程去做的,比如它有可能先找到字符串结束的单引号,然后分配
内存等等,但是,按照我描述的流程,可以帮助你准确的理解单引号
在这里的用法.
 
谢谢各位的帮忙,不过可惜我没有分送了。
因为我还没有赚过钱,倒把老底都给花光了。
我再慢慢理一下你们的回答。
str='''abcd'''共有6个引号。
是不是理解成1,6是配对的。表示里面是字符串。
2,3表示一个字符(')。
4,5也表示一个字符(')?
 
u r right!

呵呵,要分吗?给你200分如何?
 
to 小猪,如果可以的话。那太好了。但斑竹会认为这是作弊。
 
没关系.

http://www.delphibbs.com/delphibbs/dispq.asp?lid=1208822
 
呵呵
看各位的解释好有趣
回答的各位都没有错
只是问题不容易说清楚
用多了自然就清楚了
 
其实我在编程的过程中就很少用这种方法,很容易看花
眼(看过前面贴子的应该已经感受的到了^_^)

我是这样写的。
如:要在Edit2中显示Edit1的内容并在前后加上单引号

Edit2.text := #39+Edit1.text+#39;

虽然麻烦了一点,但是不至于太花眼吧。
 
解释:
str:='name=''' + Edit1.Text + ''''
1.先看'name='''
a>.在Delphi中字符串必须用两个单引号来括起来,字符串可通过加号(+)来联接
b>.''单独时可表示为空字符串,但是在字符串中间时表示一个单引号(')
由a>.b>可得第一个单引号和第四个配对,第二个和第三个配对,即:
'name=''' => name='
2. Edit1.Text => abcd (你自已写什么就是什么了)
3.''''
由1的a>b>可知这个是一个单引号(')
联接1.2.3可得:name='abcd'
 
应该明白了,谢谢各位。
我没有分分给各位,就好像结束不了了?
 
后退
顶部