2

我不明白以下任何一项的结果。我知道 InStrRev 给出了最后一个“匹配”的位置(从右到左)并且当我没有给出开始位置时可以理解结果。无论从左还是右开始,1 或 2 都应该给出 0 以外的值。

Private Sub Form_Load()
Dim TestString As String
TestString = "ABCDEFGHCIJK"
msgbox = InStrRev(TestString, "C", 1) 'produces 0 if optional start parameter is 1 or 2
msgbox = InStrRev(TestString, "C", 3) 'produces 3 if start parameter is 3-8
msgbox = InStrRev(TestString, "C", 9) 'produces 9 if start parameter is 9-12
'13+ produces 0 as expected since its length of string is only 12
End Sub

微软关于功能的文档:access & visual studio。在视觉工作室页面上,我尝试了页面底部的示例并得到了相同的结果,所以我知道它的工作原理。但是我的大脑没有得到。我也理解带 & 不带起始位置的 InStr 函数

4

2 回答 2

2

天哪,我刚刚明白了!我很糟糕,我有想太多事情的倾向。以下是我认为我已经挂断的内容,并且一些文档没有明确说明:

  • 两个函数的 起始 位置都从左边开始
  • 返回值是原始字符串中的字符位置(如果找到),无论您要求函数在字符串中的哪个位置开始搜索

如果没有HansUp,我无法弄清楚这一点。希望下面是另一种看待它的方式,以防其他人有同样的问题理解:

  • 下面返回 5。在 A 之前,位置是 1,在 B 之前是 2 等等。我们告诉它在 C 和搜索字符串(CDEFGHIJKLMN)的剩余部分之前开始,其中仍然有 E

    InStr(3, "ABCDEFGHIJKLMN", "E")

  • 下面返回 0。我们告诉它从 C 之前开始并搜索其中没有 E 的字符串 (AB) 的剩余部分。字符串的其余部分在 AB 上的原因是因为它从 RIGHT-TO-LEFT 搜索

    InStrRev("ABCDEFGHIJKLMN", "E", 3)

于 2013-04-10T21:27:57.623 回答
1

我将提供一个不同的例子,希望能让情况更清楚。在立即窗口中(使用Ctrl+g快捷方式转到那里)...

TestString = "123456789"
? InStrRev(TestString, "3", 2)
 0 

该语句要求InStrRev从 in 的第二个字符开始TestString并向后搜索字符"3"。由于前两个字符TestString"12",因此在该子字符串中找不到"3"InStrRev ,因此返回 0。

在这个例子中,我要求InStrRev从第四个字符开始搜索......

? InStrRev(TestString, "3", 4)
 3 

由于前四个字符TestString"1234",所以找到了"3"作为第三个字符,所以InStrRev返回 3。

关于“1 或 2 应该给出 0 以外的值”这句话……这是不正确的,正如我的第一个示例所展示的那样。

于 2013-04-10T14:49:12.997 回答