无法拆分PascalCase字符串并将其存储在VB中的数组中

时间:2017-05-14 23:53:27

标签: arrays vb.net pascalcasing

  const marker = {
    position: {
      lat: item.position.lat,
      lng: item.position.lon
    },
      title: item.title,
      showInfo: false,
      price: `${item.price}/day`,
      images: `http://res.cloudinary.com/letitmow/image/upload/w_40,h_40/${item.images[0]}.jpg`,
  }
  return <Marker
  onClick={()=> {marker.showInfo = !marker.showInfo}}
  {...marker}>
 {marker.showInfo && (
  <InfoWindow
   onCloseClick={()=>{marker.showInfo = !marker.showInfo}}
   >
    <Link to={`/listings/${item._id}`}>
      <div>
        <h2>{marker.title}</h2>
        <img src={marker.images} />
        <h3>{marker.price}</h3>
      </div>

    </Link>

  </InfoWindow>
)}
  </Marker>
});

CorrectHorseBatteryStaple

还有一个问题,我不能使用类,函数,除Mid(),Right(),Left(),Len(),Asc()之外的内置函数。这使得整个事情变得更加困难。

我不能为我的生活弄清楚如何比较字符串中的字符,以某种方式停止循环/存储数组中的第一个字,依此类推。

这是我到目前为止所做的事情,其中​​没有任何意义:

Correct
Horse
Battery
Staple
(Empty)

2 个答案:

答案 0 :(得分:1)

显然,你还没有运行代码。它充满了错误,因为它永远不会按预期运行。

Dim str(5) As String
For z As Integer = 1 To 5  ' will never run for over 5 words

在下一行,我认为您打算使用Mid(input, i , 1)1不是ll会给你整个字符串而不只是一个字母。

        temp = Mid(input, i, l)
        temp2 = Mid(input, i + 1, l)

此行不会考虑AZ。您应该使用>=<=

        If Asc(temp) >= 65 And Asc(temp) <= 90 Then

此行将在最后一个字符

上返回错误或空字符串
temp2 = Mid(input, i + 1, l)

这一行不会考虑数组中的第一个元素

For a As Integer = 1 To 5
    Console.WriteLine(str(a))
Next a

看起来您已经受到使用原生VB6功能的限制了,尽管VB.net的功能可以帮助您更清晰地编写更少的内容。

下面的代码,再次限制为5个字,应该为您提供所需的输出:

Sub Main()
    Dim input As String
    Dim str(5) As String
    Dim tempstr As String
    Dim temp As Char
    Dim temp2 As Char
    Dim l As Integer
    Dim arrCounnter As Integer
    Console.WriteLine("Enter the string: ")
    input = Console.ReadLine()
    tempstr = ""
    l = Len(input)

    For i As Integer = 1 To l
        temp = Mid(input, i, 1)
        'If capital, add to new temp; put old temp in array
        If Asc(temp) >= 65 And Asc(temp) <= 90 Then
            If tempstr <> "" Then
                str(arrCounnter) = tempstr
                arrCounnter = arrCounnter + 1
            End If
            tempstr = temp
        Else
            'If not, add to old temp, nxt
            tempstr = tempstr & temp
        End If
        If i = l Then str(arrCounnter) = tempstr
    Next i

    For a As Integer = 0 To 5
        If str(a) = "" Then
            Console.WriteLine("(Empty)")
        Else
            Console.WriteLine(str(a))
        End If
    Next a
    Console.ReadKey()
End Sub

答案 1 :(得分:1)

在开始之前,我建议您使用列表而不是数组。这样,如果要分割更多单词,则无需更改代码。但是,我猜你还没有涵盖那些。所以......

最简单的方法是循环遍历数组的每个字符,如果字符是大写,则转到下一个数组项并将该字符添加到数组项。如果字符是小写,则只需将其添加到当前数组项。您不需要以这种方式使用这么多变量。

这里假设第一个字母是大写的。如果不是,那就会有

  

指数超出范围

错误。

在这里你去..

Module module1
    Sub Main()

        Dim input As String
        Dim str(3) As String
        Dim temp As String
        Dim l As Integer
        Dim z As Integer = -1 ' array index
        Console.WriteLine("Enter the string: ")
        input = Console.ReadLine()
        l = Len(input)
        For i As Integer = 1 To l
            temp = Mid(input, i, 1)
            'if temp is a capital letter increase the array index by 1 and add temp to that array item
            If (Asc(temp) >= 65 And Asc(temp) <= 90) Then
                z = z + 1
                str(z) = str(z) & temp
            End If
            ' if the temp is lower case then just add temp to the current array item
            If (Asc(temp) >= 97 And Asc(temp) <= 122) Then
                str(z) = str(z) & temp
            End If
        Next
        Console.WriteLine()

        For a As Integer = 0 To 3
            Console.WriteLine(str(a))
        Next a
        Console.ReadKey()
    End Sub
End Module

我应该解释为什么Z从-1开始。这是基于输入字符串的第一个字母是大写的假设。

当您第一次浏览循环时,存储在temp中的第一个字符是大写字母,并且第一个If语句的内容被执行,因此将1添加到z使z = 0。然后将大写的第一个字母添加到str(0),这是数组的第一个元素。

当你继续循环时,后续的小写字母只会被添加到str(0)。

当循环到达下一个大写字母时,1再次添加到z,这样z = 1,大写字母被添加到z(1),依此类推。