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)
答案 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
不是l
。 l
会给你整个字符串而不只是一个字母。
temp = Mid(input, i, l)
temp2 = Mid(input, i + 1, l)
此行不会考虑A
和Z
。您应该使用>=
和<=
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),依此类推。