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

Arrays 我需要有人解释从输入框中提取这些字符串,arrays,string,delphi,Arrays,String,Delphi,德尔福2010 我有一个过程,用户输入他们的名字和姓氏,然后我将姓氏和名字提取到两个不同的字符串中。有人能解释一下代码中+1,3和pos“”的意义吗?这些值何时需要更改?例如,为什么是+1而不是+2谢谢 procedure TForm1.GenerateOnceoffPassword1Click(Sender: TObject); var suser, ssurname, sname, spassword : string; arrpassword : array[1..150] of str

德尔福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); 

我想您已经在OLH或其他地方查找了复制和Pos功能。因此,在你的q和评论中处理你的观点:

a。copysuser,pos'',suser+1,3中的+1表示复制调用应从调用pos返回的空间字符在suser中首次出现后的第一个字符开始。如果pos在suser中找不到空间,它将返回0,因此复制将从suser的第一个字符开始。另见下文第2点

b。“3”表示副本最多应从pos+1告知开始复制的位置复制3个字符。我说最多是因为复制就是这样工作的,代码中没有任何内容强迫用户在第一个空格后输入一个包含3个或更多字符的字符串。顺便说一句,姓氏最多只能包含3个字符似乎有点奇怪

c。在你的评论中,大概是指1,=1,实际上是指1,=-1,无论如何,第二次调用Copy中的1意味着从suser的第一个字符开始复制,pos-1意味着最多复制X个字符,其中X比调用pos返回的值小一个,换句话说,在第一次出现空格之前,将字符从suser复制到1。如果suser中没有空间,这将导致sname为空

请注意:

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

与其提示用户只使用小写,不如养成编写代码的习惯,不管大小写都可以。显然,这不是q中特定代码的问题,但无论如何

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


所以你会要求每一个Pos和拷贝用例?那不是在浪费时间吗?了解这些函数是如何工作的对你来说不是更好吗?我不明白的是为什么我们需要使用+1,3和1,=1。根据我的理解,这意味着从第一个字符开始直到下一个字符结束。例如:CopyArrLastname[k],从ArrLastname的第一个字母到第三个字母的1,3是正确的吗?如果你不明白它们为什么在那里,请将它们取下并比较差异。回答像这样的简单问题不需要你的手——做一些实验,自己尝试解决问题。您在上一个问题中获得了信息,但似乎没有努力从答案中学习。尝试用谷歌搜索Delphi Pos字符串和Delphi Copy字符串。你太懒了。在Delphi XE2中,被更新为一次支持多个输入。因此,用户可以在同一对话框的一个字段中键入他们的姓名,在另一个字段中键入他们的姓氏,它们将作为单独的字符串返回,无需手动将它们分开。