2017-04-21 1 views
1

Ich habe die nächste Frage. Wenn ich zum Beispiel die nächste CharArray: {! (! A & & A) (! A & & A)} '!' Das Problem hier ist, dass ich das alles löschen möchten das ist neben "A" und addiere "!" zum 'A', das es im ursprünglichen CharArray nicht hat. So ist das Endergebnis dieses Problems sein müssen: Wie lösche und füge ich Elemente in einem CharArray in C# hinzu?

Ich habe versucht, dies zu verwenden, um die zu lösch {(A & & A!) (A & & A)!} '': // Regla ist der String, {! (! A & & A) (! A & &! A)}

`char[] array = Regla.ToCharArray(); 
      for (int i = 0; i < array.Length; i++) 
      { 
       char c = array[i]; 
       if (c == idL1 && array[i - 1] == '!') 
       { 
        if (cont1 == 0 && cont2 == 0) 
        { 
         var tRegla = new StringBuilder(Regla); 
         tRegla.Remove(i - 1, 1); 
         Regla = tRegla.ToString(); 
         cont1++; 
        } 
        if (cont1 == 1 && cont2 == 1) 
        { 
         var tRegla = new StringBuilder(Regla); 
         tRegla.Remove(i - 2, 1); 
         Regla = tRegla.ToString(); 
         cont1++; 
        } 
        if (cont1 == 2 && cont2 == 2) 
        { 
         var tRegla = new StringBuilder(Regla); 
         tRegla.Remove(i - 3, 1); 
         Regla = tRegla.ToString(); 
         cont1++; 
        } 
        if (cont1 == 3 && cont2 == 3) 
        { 
         var tRegla = new StringBuilder(Regla); 
         tRegla.Remove(i - 4, 1); 
         Regla = tRegla.ToString(); 
         cont1++; 
        } 
         cont2++; 
        }` 

Aber im Moment ein hinzufügen enthält '!' Ich habe eine Menge Probleme, weil der Zähler ‚i‘ ändert und ich verwende sompething wie:

`var tRegla = new StringBuilder(Regla); 
tRegla.Insert(i - 1, "!"); 
Regla = tRegla.ToString(); 
cont1++;}` 

Ich denke, es ein besserer Weg, es zu lösen ist. Vielen Dank.

+1

Anstelle eines Arrays verwenden Sie eine 'List '. Dann können Sie einfügen oder entfernen, ohne alles kontinuierlich neu zu erstellen. –

+0

Verwenden Sie keine for-Schleife, sondern eine while-Schleife, in der Sie den Index selbst inkrementieren. Auf diese Weise können Sie den Index nach dem Einfügen oder Entfernen eines '!' Justieren. –

Antwort

4

Müssen Sie ein Char-Array verwenden, um dies zu tun? Scheint mir, könnten Sie tun dies nur statt:

Regla.Replace("A", "!A").Replace("!!A", "A"); 

Es alle Instanzen des Briefes A mit !A ersetzt, so dass anstelle von !A und A Sie haben !!A und !A. Dann ersetzt es alle !!A durch nur A, die das genaue Gegenteil des Originals sein sollte.

Um dies mit einem Großbuchstaben zu arbeiten, müssen Sie stattdessen Regex.Replace verwenden.

using System; 
using System.Text.RegularExpressions; 

public class Program 
{ 
    public static void Main() 
    { 
     var Regla = "{!(!A && A) (!A && !A)}"; 

     var output = Regex.Replace(Regla, "([A-Z])", "!$1").Replace("!!", ""); 

     Console.WriteLine(output); 
    } 
} 

Dies ist etwas komplizierter ... der reguläre Ausdruck steckt den Brief innerhalb von(), die es ein capture group macht. Dann fügt das Ersetzen-Bit eine ! zu $1 hinzu, die die Instanz des übereinstimmenden Zeichens innerhalb der Erfassungsgruppe darstellt. Dann entfernt der Aufruf an .Replace()!! in der Zeichenfolge. Dies funktioniert mit jedem Großbuchstaben. Wenn es mit anderen Mustern arbeiten muss, ändern Sie einfach den regulären Ausdruck.

+0

Eigentlich kann ich jeden Buchstaben verwenden, also kann es A zu Z sein, und ich muss feststellen, ob dieser Buchstabe ein '!' zu seiner Linken (! A oder! Z, zum Beispiel). Wenn es so ist, ändert das Programm die Zeichenfolge in A o Z (ohne '!'). Wenn die Zeichenfolge nur einen Buchstaben enthält, wird ein '!' links von diesem Brief. – Plapa

+0

Wenn das der Fall ist, müssen Sie es etwas komplexer sein. Ich füge Code für diesen Fall in meine Antwort ein. – Redit0

+0

Vielen Dank! – Plapa

Verwandte Themen