Vb.net 在VB中不使用库函数查找子字符串

Vb.net 在VB中不使用库函数查找子字符串,vb.net,Vb.net,我对这个节目有点困惑。 我对VisualBasic还不熟悉,但对C语言还处于中级水平。 实际上,我想在不使用Visual Basic库函数的情况下获取字符串的子字符串。 这里是C源代码,我也给出了我的VB代码。 1.程序将从用户处获得两个输入,即A和B 2.然后从B中找到子字符串。 3.最后打印结果 inti,j=0,k=0,substr=0; 对于(i=0;iVB,它有一个名为InStr的内置函数,它是语言的一部分。它返回一个整数,指定一个字符串在另一个字符串中第一次出现的起始位置 Pete

我对这个节目有点困惑。 我对VisualBasic还不熟悉,但对C语言还处于中级水平。 实际上,我想在不使用Visual Basic库函数的情况下获取字符串的子字符串。 这里是C源代码,我也给出了我的VB代码。 1.程序将从用户处获得两个输入,即A和B 2.然后从B中找到子字符串。 3.最后打印结果

inti,j=0,k=0,substr=0;

对于(i=0;iVB,它有一个名为InStr的内置函数,它是语言的一部分。它返回一个整数,指定一个字符串在另一个字符串中第一次出现的起始位置


Pete

VB有一个名为InStr的内置函数,它是语言的一部分。它返回一个整数,指定一个字符串在另一个字符串中第一次出现的起始位置


Pete

您的困惑部分在于.Net字符串不仅仅是字符缓冲区。我假设您至少可以使用字符串。如果不能,请使用“需要声明字符数组”。这样一来,您就可以实现1:1的转换:

私有共享函数搜索(ByVal a作为字符串,ByVal b作为字符串)作为整数
尺寸i为整数=0
尺寸j为整数=0
作为整数的Dim firstOcc
而我=a.Length,则返回-1'搜索无法继续
firstOcc=i
而a.Chars(i)=b.Chars(j)和also i
但请不要实际使用它。你真正需要的是:

Private Shared Function search(ByVal haystack as String, ByVal needle As String) As Integer
     Return haystack.IndexOf(needle)
End Function

您的困惑部分在于.Net字符串不仅仅是字符缓冲区。我假设您至少可以使用字符串。如果不能,请使用“需要声明字符数组”。这样,您就可以以1:1的转换方式实现:

私有共享函数搜索(ByVal a作为字符串,ByVal b作为字符串)作为整数
尺寸i为整数=0
尺寸j为整数=0
作为整数的Dim firstOcc
而我=a.Length,则返回-1'搜索无法继续
firstOcc=i
而a.Chars(i)=b.Chars(j)和also i
但请不要实际使用它。你真正需要的是:

Private Shared Function search(ByVal haystack as String, ByVal needle As String) As Integer
     Return haystack.IndexOf(needle)
End Function
尝试此操作,这将返回一个列表(整数),其中包含源文本中所有出现的查找文本的索引,位于指定的搜索开始位置之后

Option Strict On
Public Class Form1
''' <summary>
''' Returns an array of indexes where the find text occurred in the source text.
''' </summary>
''' <param name="Source">The text you are searching.</param>
''' <param name="Find">The text you are searching for.</param>
''' <param name="StartIndex"></param>
''' <returns>Returns an array of indexes where the find text occurred in the source text.</returns>
''' <remarks></remarks>
Function FindInString(Source As String, Find As String, StartIndex As Integer) As List(Of Integer)
    If StartIndex > Source.Length - Find.Length Then Return New List(Of Integer)
    If StartIndex < 0 Then Return New List(Of Integer)
    If Find.Length > Source.Length Then Return New List(Of Integer)
    Dim Results As New List(Of Integer)
    For I = StartIndex To (Source.Length) - Find.Length
        Dim TestString As String = String.Empty
        For II = I To I + Find.Length - 1
            TestString = TestString & Source(II)
        Next
        If TestString = Find Then Results.Add(I)
    Next
    Return Results
End Function
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Try
        Dim Search As String = "Hello world, this world is an interesting world"
        Dim Find As String = "world"
        Dim Indexes As List(Of Integer) = New List(Of Integer)
        Try
            Indexes = FindInString(Search, Find, 0)
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
        RichTextBox1.Text = "Search:" & vbCrLf
        RichTextBox1.Text = RichTextBox1.Text & Search & vbCrLf & vbCrLf
        RichTextBox1.Text = RichTextBox1.Text & "Find:" & vbCrLf
        RichTextBox1.Text = RichTextBox1.Text & Find & vbCrLf & vbCrLf
        RichTextBox1.Text = RichTextBox1.Text & "-----------" & vbCrLf
        RichTextBox1.Text = RichTextBox1.Text & "Result Indexes:" & vbCrLf & vbCrLf
        For Each i As Integer In Indexes
            RichTextBox1.Text = RichTextBox1.Text & i.ToString & vbCr
        Next
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try
End Sub
End Class
选项严格打开
公开课表格1
''' 
''返回源文本中查找文本所在的索引数组。
''' 
''您正在搜索的文本。
''您正在搜索的文本。
''' 
''返回源文本中查找文本所在的索引数组。
''' 
函数FindInString(源作为字符串,查找作为字符串,StartIndex作为整数)作为列表(整数)
如果StartIndex>Source.Length-Find.Length,则返回(整数的)新列表
如果StartIndex<0,则返回新列表(整数)
如果Find.Length>Source.Length,则返回(整数的)新列表
将结果调整为新列表(整数)
对于I=StartIndex To(Source.Length)-Find.Length
Dim TestString作为String=String.Empty
对于II=I到I+查找长度-1
TestString=TestString&源(II)
下一个
如果TestString=Find,那么Results.Add(I)
下一个
返回结果
端函数
私有子按钮1\u单击(发送者作为对象,e作为事件参数)处理按钮1。单击
尝试
Dim Search As String=“你好,这个世界很有趣”
Dim Find As String=“world”
将索引作为列表(整数的)=新列表(整数的)
尝试
索引=FindInString(搜索,查找,0)
特例
MsgBox(例如ToString)
结束尝试
RichTextBox1.Text=“搜索:”&vbCrLf
RichTextBox1.Text=RichTextBox1.Text&Search&vbCrLf&vbCrLf
RichTextBox1.Text=RichTextBox1.Text&“查找:”&vbCrLf
RichTextBox1.Text=RichTextBox1.Text&Find&vbCrLf&vbCrLf
RichTextBox1.Text=RichTextBox1.Text&“------------”和vbCrLf
RichTextBox1.Text=RichTextBox1.Text&“结果索引:”&vbCrLf&vbCrLf
对于索引中作为整数的每个i
RichTextBox1.Text=RichTextBox1.Text&i.ToString&vbCr
下一个
特例
MsgBox(例如ToString)
结束尝试
端接头
末级
这里是另一条路,那里有
Function FindInString(Source As String, Find As String, StartIndex As Integer) As Integer()
    If StartIndex > Len(Source) - Len(Find) Then Return {}
    If StartIndex < 0 Then Return {}
    If Len(Find) > Len(Source) Then Return {}
    Dim Results As Integer() = {}, ResultCount As Integer = -1
    For I = StartIndex To Len(Source) - Len(Find)
        Dim TestString As String = ""
        For II = I To I + Len(Find) - 1
            TestString = TestString & Source(II)
        Next
        If TestString = Find Then
            ResultCount += 1
            ReDim Preserve Results(ResultCount)
            Results(ResultCount) = I
        End If
    Next
    Return Results
End Function