2016-12-10 109 views
1

我試圖將字母切換到單詞的末尾。就像我在圖片中的示例輸出一樣。 Sample output 使用getchar和刪除功能,我能夠移動1個字母。將字母切換到字符串的末尾Visual Basic

 mychar = GetChar(word, 1) 'Get the first character 
     word = word.Remove(0, 1) 'Remove the first character 
     input.Text = mychar   
     word = word & mychar 
     output.Text = word 

這是我的代碼,用於移動1個字母。 I.E.對於「星球大戰」這個詞,它目前轉移了1個字母,並且說'tar WarsS'

我怎樣才能讓這個動作3個角色到最後?就像在示例圖像中一樣。

+0

什麼應該發生,如果量如果大於文字的長度? – Sehnsucht

回答

-1
n = 3 
output.Text = Right(word, Len(word) - n) & Left(word, n) 
1
intNumChars = input.text 

output.text = mid(word,4,len(word)) & left(word,3) 

我想它很容易爲你閱讀,但你可以設置intNumChars變量的值在文本框中,並與intNumChars + 1和3 intNumChars更換4。

mid()函數可以在字符串mid(string,start,finish)中間返回一段文本。 len()函數返回一個字符串的長度,以便代碼可以處理不同長度的文本。左邊的函數返回字符串左邊的字符。

我希望這有些幫助。

+0

謝謝,這是非常有幫助的。 – dczx

+0

因爲這是VB.Net,所以你應該比傳統方法更喜歡'Substring'這樣的.Net字符串方法。 –

0

你可以寫一個,作爲一種置換的,其中每個字符指數映射到一個新的地方範圍[0, textLength[

爲了做到這一點,你必須編寫自定義模量的Mod運算符的餘數大於模數(從數學的角度來看,關於如何處理負數)

因此,您只需要遍歷字符串索引並將每個字符串索引映射到其「長度」模值的長度的文字

' Can be made local to Shift method if needed 
Function Modulus(dividend As Integer, divisor As Integer) As Integer 
    dividend = dividend Mod divisor 
    Return If(dividend < 0, dividend + divisor, dividend) 
End Function 

Function Shift(text As String, offset As Integer) As String 
    ' validation omitted 
    Dim length = text.Length 
    Dim arr(length - 1) As Char 

    For i = 0 To length - 1 
     arr(Modulus(i + offset, length) Mod length) = text(i) 
    Next 

    Return new String(arr) 
End Function 

通過這種方式,您可以輕鬆處理負值或大於文本長度的值。

請注意,使用StringBuilder代替陣列也是一樣的;我不確定哪一個是「更好」

Function Shift(text As String, offset As Integer) As String 
    Dim builder As New StringBuilder(text) 
    Dim length = text.Length 

    For i = 0 To length - 1 
     builder(Modulus(i + offset, length) Mod length) = text(i) 
    Next 

    Return builder.ToString 
End Function 
0

使用戈登的代碼做了訣竅。左邊的函數visual studio試圖創建一個函數的存根,所以我在調用它時使用了完全限定的函數名稱。但是,這工作完美。

intNumChars = shiftnumber.Text output.Text = MID(文字,intNumChars + 1,LEN(字))& Microsoft.VisualBasic.Left(文字,intNumChars)