我需要有人解释从输入框中提取这些字符串

时间:2014-11-02 19:20:52

标签: arrays string delphi

delphi 2010

我有一个程序,用户输入他们的姓名和姓氏,然后我将姓氏和姓名提取到两个不同的字符串中。有人可以在代码中解释+1,3和pos''的重要性,这些值何时需要更改?(例如为什么它是+1而不是+2)谢谢

procedure TForm1.GenerateOnceoffPassword1Click(Sender: TObject);
var
suser, ssurname, sname, spassword : string; 
arrpassword : array[1..150] of string;  
begin
inc(icounter); 
suser := inputbox('Enter name and surname','lower case ONLY','');
ssurname := copy(suser,pos(' ',suser)+1, 3); 
sname := copy(suser, 1, pos(' ',suser)-1); 

1 个答案:

答案 0 :(得分:1)

我假设您已经在OLH或其他地方查找了Copy和Pos功能。所以,在你的q和评论中处理你的观点:

一个。 “copy(suser,pos('',suser)+1,3)中的”+1“表示对Copy的调用应该在调用返回的suser中第一次出现空格字符后的第一个字符处开始到Pos()。如果Pos()在suser中没有找到空格,它将返回0,因此复制将从suser的第一个字符开始。另见下文第2点。

湾“3”表示复制应该复制(最多)3个字符,从它被告知开始复制“pos()+ 1”。我说“最多”因为这就是Copy()的工作方式,代码中的任何内容都不会强迫用户在第一个空格后输入一个包含3个或更多字符的字符串。似乎有点奇怪,姓氏应限制在最多3个字符,顺便说一句。

℃。大概在你的评论中提到“1,= 1”,你的意思是“1,= - 1”无论如何,第二次调用Copy()中的“1”表示“从suser的第一个字符开始复制”, “pos() - 1”表示最多复制X个字符,其中X比调用pos()返回的值小1,换句话说,在第一次出现空格之前将字符从suser复制到1。如果suser中没有空格,则会导致sname为空。

请注意:

  1. 当使用Pos()和Copy()等函数分割字符串时,最好养成使用Trim()函数从子字符串中删除任何前导或尾随空格的习惯(s )。在点a。如上所述,您编写的代码忽略了用户可能键入两个(或更多)连续空格的可能性。

  2. 不是提示用户仅使用小写,而是养成编写无论大小写都有效的代码的习惯。显然,这不是q中特定代码的问题,但无论如何。

  3. 传统上,Delphi中的字符串是基于1的,这意味着,如果非空白,则可以访问该字符串,就好像它是一个起始索引为1的数组。编译器的较新版本(比D2010更新,对于像Android这样的移动平台使用基于0的字符串,这会导致像你这样的代码算法在未经修改的情况下出现问题。