2016-12-10 6 views
1

Ich versuche, Buchstaben an das Ende des Wortes zu verschieben. Wie die Beispielausgabe, die ich im Bild habe. Sample output Mit getchar und remove-Funktion konnte ich 1 Buchstaben verschieben.Verschiebe Buchstaben an das Ende eines Strings 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 

Dies ist mein Code zum Verschieben von 1 Buchstaben. I.E. für das Wort "Star Wars", verschiebt es derzeit 1 Brief und sagt "tar WarsS"

Wie kann ich diesen Umzug 3 Zeichen zum Ende machen? Wie im Beispielbild.

+0

Was soll passieren, wenn der Betrag, wenn mehr als die Länge des Textes? – Sehnsucht

Antwort

-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) 

wollte ich es einfach für Sie zu lesen, aber Sie die intNumChars Variable auf den Wert in Ihrem Textfeld gesetzt und die 4 mit intNumChars + 1 und 3 mit intNumChars ersetzen.

Die Funktion mid() kann einen Textabschnitt in der Mitte einer Zeichenfolge Mitte (Zeichenfolge, Anfang, Ende) zurückgeben. Die len() - Funktion gibt die Länge einer Zeichenfolge zurück, sodass der Code für Texte mit unterschiedlichen Längen verwendet werden kann. Die linke Funktion gibt Zeichen von der linken() einer Zeichenfolge zurück.

Ich hoffe, dass dies eine Hilfe ist.

+0

Danke, das war sehr hilfreich. – dczx

+0

Da dies VB.Net ist, sollten Sie die .Net-String-Methoden wie 'Substring' den älteren Methoden vorziehen. –

0

Sie könnten ein schreiben, dass als eine Art permute, die jeden char-Index abbildet an einen neuen Ort im Bereich [0, textLength[

Um das zu tun, dass Sie einen benutzerdefinierten Modul als Mod schreiben müssen würden Operator ist mehr ein Rest als ein Modul (aus einem mathematischen Blickwinkel, in Bezug darauf, wie negativ behandelt werden)

Damit müssen Sie nur Ihre String-Indizes durchlaufen und jedes auf seine "Offset" -Modulo die Länge zuordnen des Textes

' 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 

Auf diese Weise können Sie problemlos negative Werte oder Werte verarbeiten, die größer als die Länge des Textes sind.

Hinweis, das Gleiche ist mit einem StringBuilder anstelle eines Arrays möglich; Ich bin mir nicht sicher, welcher ist "besser"

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

Die Verwendung von Gordon's Code hat den Trick. Die linke Funktion Visual Studio hat versucht, einen Stub der Funktion zu erstellen, daher habe ich beim Aufruf den voll qualifizierten Funktionsnamen verwendet. Aber das hat perfekt funktioniert.

intNumChars = shiftnumber.Text output.Text = Mid (Wort, intNumChars + 1, Len (Wort)) & Microsoft.VisualBasic.Left (Wort, intNumChars)