2016-12-10 17 views
1

文字を単語の最後に移動しようとしています。サンプルの出力と同様、私は画像にあります。 Sample output getcharとremove関数を使用すると、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文字シフトしており、「タールウォーズS」と書かれています

どうすればこの文字を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でintNumChars + 1と3と4を置き換えることができます。

mid()関数は、文字列mid(string、start、finish)の途中でテキストのセクションを返すことができます。 len()関数は文字列の長さを返し、異なる長さのテキストに対してコードが機能するようにします。左の関数は文字列の左から文字を返します。

私はこれが助けになることを望みます。

+0

ありがとう、これは非常に役に立ちました。 – dczx

+0

これはVB.Netなので、従来のメソッドよりも 'Substring'のような.Net文字列メソッドを使うべきです。 –

0

あなたがModとしてカスタム弾性率を記述する必要がありますことを行うためには範囲[0, textLength[

で新しい場所にそれぞれの文字インデックスをマップ並び替えるの一種として、それを書くことができ演算子はモジュラスよりも残っています(負の扱いに関する数学的な観点から)

これで、文字列インデックスをループし、それぞれの値を "offsetted"の値でモジュロにマップする必要があります文章の内容

' 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スタジオは関数のスタブを作成しようとしたので、呼び出すときに完全修飾された関数名を使用しました。しかし、これは完全に機能しました。

intNumChars = shiftnumber.Text output.Text =ミッド(ワード、intNumChars + 1、レン(単語))& Microsoft.VisualBasic.Left(ワード、intNumChars)

関連する問題