String in 2er Blöcke unterteilen

Hallo Leute,
ich möchte gerne ein String in 2er Blöcke unterteilen und anschließend in ein String array speichern.
Beispiel:
Code:
string test = "unterteilen";
string [] chararrayw = {"un" , "te", "rt" ,"ei", "le", "n"}

Wie kann ich mein string unterteilen und anschließend in ein String array speichern ?
 
Zuletzt bearbeitet:

Spyke

Premium-User
Ein Char ist immer ein Zeichen,
in einem char 2 zeichen zu halten geht nicht.

ein char Array aus dem kompletten string bekommst du über
Code:
test.ToCharArray
aber wie gesagt, jedes zeichen für sich
 
Uppps mein Fehler
ich meinte natürlich ein String [ ]

Habe es hinbekommen den String in 2 Blöcke zu unterteilen aber wie speichere ich jetzt Blöcke in ein String Array ?

Code:
string text = "unterteilen";
            int blockgroeße = 2;
            int stringLength = text.Length;
            for (int i = 0; i < stringLength; i += blockgroeße)
            {
                if (i + blockgroeße > stringLength) blockgroeße = stringLength - i;
                string neu = text.Substring(i, blockgroeße);
                Console.WriteLine(neu);
            }
 
Der Sinn und Zweck ist es das ich ein String habe den ich umstellen möchte. Für das Umstellen muss ich aber erstmal den Text der im String enthalten ist in 2er Blöcke aufteilen, damit er weiß welche Zeichen er umstellen soll.

z.B.


Code:
string text = "123456";
            int blockgroeße = 2;
            int stringLength = text.Length;
            for (int i = 0; i < stringLength; i += blockgroeße)
            {
                if (i + blockgroeße > stringLength) blockgroeße = stringLength - i;
                string neu = text.Substring(i, blockgroeße);
                Console.WriteLine(neu);
            }

Anschließend möchte ich auf die Blöcke ein Reverse ausführen.

Das Ergebnis sollte dann so aussehen: 214365
 

Spyke

Premium-User
Die einfachste Lösung wäre deine teile in ein List<string> zu packen.
Dieses hat eine ToArray Methode mit der du das Array dann hättest
(oder du könntest auch gleich mit der Liste weiter arbeiten, die Liste hätte auch gleich eine Reverse methode)

Ansosnten alternativ das Array vorher anlegen
die anzahl der Elemente müsstest du glaube durch "text.Length / blockgroeße" bekommen.
Denn Index/Elementposition müsstest du durch "i / blockgroeße" bekommen

so ungefähr:
Code:
string[] meinArray = new string[text.Length / blockgroeße];
.....
for(...)
     meinArray[i/blockgroeße] = text.SubString(...);
 
Hey Spyke,
danke erstmal für deine Antwort :)

die List<string> Methode funktioniert leider nicht da er die list Teile komplett nimmt und sie einfach umstellt.

z.B.
Code:
            List<string> list = new List<string>();
            list.Add("56");
            list.Add("34");
            list.Add("12");
            list.Reverse();
            list.ToArray();
           
            foreach (string s in list)
            {
                Console.WriteLine(s);
            }

Ergebnis:
12
34
56

Habe was im I-Net gefunden aber verstehe es nicht :confused::confused::confused:

Der Code ist in Delphi
Code:
                for I := 1 to Length(salt1) do
  begin
  if I mod 2 = 0 then
  begin
  salt3 := salt3 + reversestring(Copy(salt1, I - 1, 2));
  end;
  salt3part := Copy(salt1, I, Length(salt1));
  end;
  if Length(salt3part) > 0 then
  salt3 := salt3 + salt3part;
 

Spyke

Premium-User
so gut kenne ich mich in delphi nicht aus aber ich könnte versuchen es zu beschreiben

Zeile 2: normale for Schleife wie in C# beginnt bei 1 und läuft solange Länge von salt1 nicht erreicht wurde

Zeile 4: mod ist denke ich mal modula gemeint (in C# %, siehe http://msdn.microsoft.com/de-de/library/0w4e0fzs.aspx)
Prüft also ob bei der division von i durch 2 ein Rest von 0 bleibt

Zeile 6: Ist die Anweisung die Aufgerufen wird wenn zeile 4 seine gültigkeit erreicht, im prinzip wird dort alles in salt3 zurück geschrieben, aber umgekehrt.

Zeile 8: dort wird der bereich von I an bis zur länge des Textes einfach "gesichert"
Im Prinzip handelt es sich hier drum um eine Abbruch Sicherung falls die Länge des Texten ungerade ist, sprich nicht durch 2 teilbar ist.
Dieser letzte Teil wird nämlich bei Zeile 11 dem salt3 hinzugefügt, dafür prüft einfach Zeile 10 ob was hinterlegt wurde
 
Die Lösung ;)

Code:
string text = "123456";
int chunkSize = 2;

char[] chars = text.ToCharArray();
for (int i=0; i<chars.Length; i+=chunkSize)
{
Array.Reverse(chars, i, Math.Min(chunkSize, chars.Length - i));
}
string result = new String(chars);

System.Console.WriteLine(result);