2014-02-28 4 views
6

ich das Problem nicht bekommen habe - ich habe versucht, eine einfache Aktion zu tun:oder der Indexer ‚string.this [int]‘ kann nicht zugewiesen werden - es gelesen hat, nur

for(i = x.Length-1, j = 0 ; i >= 0 ; i--, j++) 
{ 
    backx[j] = x[i]; 
} 

Beide deklariert werden :

String x; 
String backx; 

Was ist das Problem? Es heißt der Fehler im Titel ... Wenn es ein Problem gibt - gibt es eine andere Möglichkeit, das zu tun? Das Ergebnis (wie der Name 'backx' Hinweise) ist, dass Backx die Zeichenfolge X rückwärts enthält. P.S. x ist nicht leer - es enthält eine Teilzeichenkette von einer anderen Zeichenkette.

+1

möglich Duplikat [Edit Zeichen in einem String in C#] (http://stackoverflow.com/questions/2931288/edit-characters-in-a-string-in-c-sharp) – quetzalcoatl

Antwort

1

In C# string s sind unveränderlich. Sie können Xth-Zeichen nicht auf das setzen, was Sie wollen. Wenn Sie eine neue Zeichenfolge erstellen oder in der Lage sein möchten, eine Zeichenfolge zu "bearbeiten", verwenden Sie z. B. die StringBuilder-Klasse.

15

Strings sind unveränderlich: Sie können das Zeichen an einer bestimmten Position abrufen, aber Sie können nicht das Zeichen direkt zu einem neuen Zeichen ändern.

Stattdessen müssen Sie eine neue Zeichenfolge mit der Änderung erstellen. Es gibt mehrere Möglichkeiten, dies zu tun, aber StringBuilder macht die Arbeit in ähnlicher Weise zu dem, was Sie bereits haben:

StringBuilder sb = new StringBuilder(backx); 
sb[j] = x[i]; 
backx = sb.ToString(); 

EDIT: Wenn Sie einen Blick auf die string API öffentlich zugänglichen nehmen, werden Sie diese Indexer sehen :

public char this[int index] { get; } 

Dies zeigt, dass Sie einen Wert „get“ kann, sondern weil kein „set“ verfügbar ist, können Sie nicht Werte zu diesem Indexer zuweisen.

EDITx2: Wenn Sie nach einer Möglichkeit suchen, eine Zeichenfolge rückgängig zu machen, gibt es ein paar verschiedene Möglichkeiten, aber hier ist ein Beispiel mit einer Erklärung, wie es funktioniert: http://www.dotnetperls.com/reverse-string

2

String ist in .NET unveränderlich - deshalb erhalten Sie den Fehler.

Sie können einen Reverse-String mit LINQ erhalten:

string x = "abcd"; 
string backx = new string(x.Reverse().ToArray()); 

Console.WriteLine(backx); // output: "dcba" 
0

Sowohl die Variablen, die Sie Zeichenfolge haben sind, während Sie sie, als ob sie Arrays waren behandeln (na ja, sie sind). Natürlich ist es eine gültige Anweisung, über diesen Mechanismus auf Zeichen aus einer Zeichenkette zuzugreifen, die Sie nicht wirklich so zuweisen können.

Da Sie versuchen, eine Zeichenfolge umzukehren, werfen Sie einen Blick auf this Post. Es hat viele Informationen.

0
public static string ReverseName(string theName) 
    { 
     string revName = string.Empty; 
     foreach (char a in theName) 
     { 
      revName = a + revName; 
     } 

     return revName; 
    } 

Dies ist einfach und bezieht Arrays nicht direkt mit ein.

0

Der folgende Code tauscht einfach den Index jedes Zeichens in der Zeichenkette aus, was es Ihnen ermöglicht, nur halb durch die ursprüngliche Zeichenkette zu iterieren, was sehr effizient ist, wenn Sie mit vielen Zeichen zu tun haben. Das Ergebnis ist die ursprüngliche Zeichenfolge umgekehrt. Ich testete dies mit einer Zeichenfolge bestehend aus 100 Zeichen und es wurde in 0,0000021 Sekunden ausgeführt.

private string ReverseString(string testString) 
    { 

     int j = testString.Length - 1; 
     char[] charArray = new char[testString.Length]; 

     for (int i = 0; i <= j; i++) 
     { 

      if (i != j) 
      { 
       charArray[i] = testString[j]; 
       charArray[j] = testString[i]; 
      } 

      j--; 
     } 

     return new string(charArray); 
    } 
Verwandte Themen