2016-04-30 7 views
-5

Ich darf auch keine Listen verwenden.Wie würden Sie Whitespace aus einer Zeichenfolge entfernen, ohne Methoden wie .trim oder .replace zu verwenden?

Mein erster Gedanke dafür war, die anfängliche Zeichenfolge zu nehmen, um sie dann in ein char-Array umzuwandeln. Dann kopiere alles, was kein Leerzeichen ist, auf ein zweites Char-Array. Dann wandle dieses Char-Array zurück in eine Zeichenkette.

So schnell würde es etwa so aussehen;

char[] firstArray; 
char[] secondArray; 
string someString; 

for (int i = 0; i < someString.Length; i++) 
{ 
    firstArray = someString.ToCharArray(); 
    secondArray = new char[someString.Length]; 

    for (int j = 0; j < firstArray.Length; j++) 
    { 
     if (firstArray[j] != ' ') 
     { 
      secondArray[j] = firstArray[j]; 
     } 
    } 

    someString = secondArray.ToString(); 
} 

Aber wenn ich den zweiten char-Array initialisieren wäre es ein zusätzliches Zeichen ohne Wert enthält, wenn es ein Platz in ihm zunächst ist, da es auf die gleiche Größe wie der erste char-Array initialisiert wurde. Müsste ich eine ähnliche Schleife machen, bevor ich nur die Menge der Nicht-Leerzeichen zähle, dann das zweite Array basierend darauf initialisiere oder gibt es einen viel einfacheren Weg als all das, was mir fehlt? (Ohne die Verwendung von. Trim, .replace (oder etwas Ähnliches) oder Listen)

Jede Hilfe wäre willkommen.

+0

Warum _ohne Methoden wie .trim oder .replace_? –

+0

Hinweis: Ihre 'char []' s haben die gleiche Größe, aber wenn Sie etwas von einem entfernen möchten, muss das Ergebnis eine kleinere Größe haben. –

+0

Keine Konvertierung der Quellzeichenfolge in ein Array erforderlich. Und Sie könnten das 2. Array verlieren und [StringBuilder] verwenden (https://msdn.microsoft.com/en-us/library/system.text.stringbuilder%28v=vs.110%29.aspx?f=255&MSPPError=- 2147217396) statt. –

Antwort

0

Ein String implementiert bereits IEnumerable<char>, also muss man es nicht erst zu einem Array machen. Sie können es direkt aufzählen und Leerzeichen löschen. Z. B:

string x = " Hello, world"; 
string trimmed = new String(x.Where(c => !Char.IsWhiteSpace(c)).ToArray()); 
+0

Es sieht aus wie Hausaufgaben und das entspricht wahrscheinlich nicht den Einschränkungen. "ohne ... oder Listen" –

-1

Ihr Code neu erstellt die firstArray jedes Mal Array. Und ich bin nicht sicher, wofür die innere Schleife ist. Ihr Code festgelegt:

char[] firstArray; 
char[] secondArray; 
string someString = "Blah blah blah"; 

firstArray = someString.ToCharArray(); 
secondArray = new char[someString.Length]; 

int newLength = 0; 

for (int i = 0; i < firstArray.Length; i++) { 
    if (firstArray[i] != ' ') { 
     secondArray[newLength++] = firstArray[i]; 
    } 
} 

someString = new string(secondArray, 0, newLength); 

andere Art und Weise mit String:

string someString = "Blah blah blah"; 
System.Text.StringBuilder sb = new System.Text.StringBuilder(); 

foreach(char c in someString) { 
    if (!Char.IsWhiteSpace(c)) { 
     sb.Append(c); 
    } 
} 
someString = sb.ToString(); 
+0

Warum der Downvote? Vielleicht nicht die eleganteste Lösung, aber sie ist korrekt und funktioniert innerhalb der vorgegebenen Grenzen des OP. –

Verwandte Themen