Grzesiek [ www na-skroty pl ]
"Nieprzypadkowy" generator znaków - algorytm.
Otóż chciałbym uzyskać taki generator jak na
Mianowicie, użytkownik wprowadza "a", klika i otrzymuje "b". Tak do "z".
Przy "z" wraca i zaczyna od "aa", następnie "ab", "ac" ... "az", następnie "ba", itd.
Tylko za cholerę nie mogę sobie "rozkminić" algorytmu :/
Na razie mam to:
Dim txt As String = TextBox1.Text
If txt.Length = 1 Then 'jeśli jeden znak
Dim old As Integer = Asc(txt(txt.Length - 1))
Dim newtxt As String
If old = 122 Then 'jeśli Z
newtxt = Chr(97) & Chr(97)
Else
newtxt = Chr(old + 1)
End If
Response.Write(newtxt)
Else 'jeśli więcej znaków
Dim old As Integer = Asc(txt(txt.Length - 1))
Dim newtxt As String
If old = 122 Then 'jeśli ostatni Z, usuń dwa ostatnie, inkrementu przedostatni, dodaj a
Dim start As Integer = Asc(txt(txt.Length - 2))
txt = txt.Remove(txt.Length - 2)
newtxt = txt & Chr(start + 1) & Chr(97)
Response.Write(newtxt)
Else
newtxt = txt.Remove(txt.Length - 1) & Chr(old + 1)
Response.Write(newtxt)
End If
End If
I śmiga dobrze, póki ciąg nie przybiera postaci "zz", wtedy sypie się i mamy klamerkę ( ) i a.
Może jest na to jakiś prostszy sposób?
MOD [ Generaďż˝ ]
Blad musi byc tutaj, moja analiza ponizej,ale nie znam tego jezyka, rozumiem ze dziala to tak
dla przypadku txt=zz
Dim start As Integer = Asc(txt(txt.Length - 2)) // bierzesz ostatni znak z ciagu "zz" czyli masz z
txt = txt.Remove(txt.Length - 2) //kasujesz dwa znaki czyli masz text=""
newtxt = txt & Chr(start + 1) & Chr(97) newtxt=""+(z+1) +a
czyli dostaniesz cos takiego ^a
Powinno byc tak
Jesli dlugosc ciagu wieksza niz 1
musisz zrobic warunek jesli ostatni znak ciagu = z to dodaj nowy znak
czyli
txt=txt & chr(97)
else (ta czesc masz dobrze)
txt=txt(wszystko oprocz przedostatniego znaku) +txt(ostatni znak+1)
uzywajac Twojego sposobu
txt=txt.Remove(txt.Length - 1)
txt=txt & chr(old+1)
Po zz powinienes uzyskac zza.
MOD [ Generaďż˝ ]
Jesli po zz chcesz uzyskac
aaa
to algorytm powinien tak wygladac
Jezeli ostatni znak=z
sprawdz czy ciag nie sklada sie z samych znakow zzz
jak to sprawdzic
a=dlugosc ciagu txt;
txt="";
newtxt=""
licznik=0
licznikznakowrownychz=0;
dopoki licznik nie jest rowny liczbie znakow ciagu txt
if ASC(txt.Length - a-licznik) = z
licznikznakowrownychz=licznikznakowrownychz+1;
licznik=licznik+1;
jesli ciag sklada sie tylko z literek z(licznikznakowrowncyhz=a) to
txt=txt & chr(97)
jesli nie to
txt=txt.Remove(txt.Length - 1)
txt=txt & chr(old+1)