| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4479 人关注过本帖
标题:[求助]如何自定义一个函数来实现查找指定字符串在另一字符串中第N个位置?
只看楼主 加入收藏
mohan123
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2007-9-10
收藏
 问题点数:0 回复次数:10 
[求助]如何自定义一个函数来实现查找指定字符串在另一字符串中第N个位置?
如题,如何自定义一个函数来实现查找指定字符串在另一字符串中第N个位置?
我是初学者,我知道寻找字符串的位置可以使用Instr函数,但是如果我寻找的字符在一个字符串中出现n次,我想随便找到其中的一次的位置,怎么自己编写一个函数来实现呢?请大家指教!!~~
搜索更多相关主题的帖子: 函数 定义 字符 位置 
2007-09-10 16:33
mohan123
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2007-9-10
收藏
得分:0 
我试着写了下,请大家看下这样写有没有问题?
Public Function InStrL(n As Integer,
inString As String, srchString As String) As Integer

Dim iCurPos As Integer

If Len(srchString)<>0 Then
If n=1 Then

iCurPos = InStr(inString, srchString)
Else
for iCurPos = 1 to n-1

iCurPos = InStr(iCurPos + 1, inString, srchString)
Next iCurPos

End If
End If
InStrL = iCurPos

End Function
2007-09-10 16:52
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
收藏
得分:0 

On Error Goto ErrorOccurred
Dim i,k
k=1
For i=1 to n
k=instr(k,instr,sechstr)
next i
return k
ErrorOccurred:

2007-09-10 21:28
mohan123
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2007-9-10
收藏
得分:0 

根据楼上的我把原来写的改了下,看这样可以吗?
Public Function InStrL(n As Integer,
inString As String, srchString As String) As Integer

Dim iCurPos ,i As Integer

If Len(srchString)<>0 Then
iCurPos = 1
for i = 1 to n
iCurPos = InStr(iCurPos, inString, srchString)
Next iCurPos
End If

InStrL = iCurPos
End Function

2007-09-11 08:43
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
收藏
得分:0 
[CODE]Public Function InStrL(n As Integer,
inString As String, srchString As String) As Integer

Dim iCurPos ,i As Integer

If Len(srchString)<>0 Then
iCurPos = 1
for i = 1 to n
iCurPos = InStr(iCurPos, inString, srchString)
Next iCurPos ' 再想想
End If

InStrL = iCurPos
End Function[/CODE]

!!! srch=""时没有返回值!!!

!!! 抱歉我笔误了一下,instr中带入的k应当为上次的instr结果+1

修改后的代码如下:(修改处加粗了)

[CODE]Public Function InStrL(n As Integer, inString As String, srchString As String) As Long
Dim iCurPos, i As Integer
If Len(srchString) = 0 Then InStrL = -1: Exit Function

iCurPos = 0
For i = 1 To n
iCurPos = InStr(iCurPos + 1, inString, srchString)
Next i

InStrL = iCurPos
End Function[/CODE]
2007-09-11 12:49
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
收藏
得分:0 

关于为什么As Long:

VB中字符串的长度最大为约2,147,483,647字节,所以要用Long类型来存储。

[QUOTE]String 数据类型
字符串有两种:变长与定长的字符串。
变长字符串最多可包含大约 20 亿 ( 2^31)个字符。
定长字符串可包含 1 到大约 64K ( 2^16 ) 个字符。

注意 Public 定长字符串不能在类模块中使用。
String 之字符码的范围是 0 到 255。字符集的前 128 个字符(0 到 127)对应于标准的 U.S. 键盘上的字符与符号。这前 128 个字符与 ASCII 字符集中所定义的相同。后 128 个字符(128 到 255)则代表特殊字符,例如国际字符,重音符号,货币符号及分数。String 的类型声明字符为美元号 ($)。[/QUOTE]

2007-09-11 12:51
mohan123
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2007-9-10
收藏
得分:0 

谢谢,但是我不明白“If Len(srchString) = 0 Then InStrL = -1: Exit Function”
为什么要赋值为-1。

2007-09-11 14:58
心中有剑
Rank: 2
等 级:新手上路
威 望:5
帖 子:611
专家分:0
注 册:2007-5-18
收藏
得分:0 

Private Function fncGetStrNum(InString As String, InSeach As String, InCount As Integer) As Long
Dim i As Long, llCount As Long
Dim llLength As Long
i = 1: llCount = 0
llLength = Len(InString)
fncGetStrNum = -1
Do While i <= llLength
If InStr(i, InString, InSeach) > 0 Then
If llCount = InCount - 1 Then
fncGetStrNum = InStr(i, InString, InSeach)
Exit Do
End If
i = InStr(i, InString, InSeach) + Len(InSeach)
llCount = llCount + 1
End If
Loop
End Function

Private Sub Command1_Click()
MsgBox fncGetStrNum("abcdabcdabcdabcdabcd", "ab", 3)
End Sub


2007-09-11 17:11
mohan123
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2007-9-10
收藏
得分:0 
不好意思,楼上的方法不是很明白,可否稍微注解一下??
2007-09-11 17:45
slore
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:1108
专家分:0
注 册:2005-7-1
收藏
得分:0 
没有测试效率,只是提供个另外的思路……

代码长度……

Private Function fncGetStrNum(InString As String, InSearch As String, InCount As Integer) As Long
Dim
TempStr As String
TempStr = Replace(InString, InSearch, "", 1, InCount - 1)
fncGetStrNum = InStr(TempStr, InSearch)
If fncGetStrNum <> 0 Then fncGetStrNum = fncGetStrNum + (InCount - 1) * Len(InSearch)
End Function

快上课了……
2007-09-11 17:49
快速回复:[求助]如何自定义一个函数来实现查找指定字符串在另一字符串中第N个位 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029678 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved