entfernt alle Vorkommen eines Zeichens in C-String - Beispiel benötigt

7

Eingabezeichenfolge: "I am unwell" "We need to go to the doctor" "How long will it take?" .

Ausgabezeichenfolge: I am unwell We need to go to the doctor How long will it take?

Die Zeichenfolge muss von allen Vorkommen des char " bereinigt werden. Ich kann mir folgendes vorstellen:

  1. Verwenden Sie die Funktion strchr (), um das erste Vorkommen von " zu finden.
  2. Verschiebe alle Zeichen in der Zeichenkette, die nach der Position links liegen.

Wiederholen Sie die Schritte 1 und 2, bis strchr () einen NULL-Zeiger zurückgibt.

Ich halte das für eine sehr ineffiziente Art, dieses Problem anzugehen. Ich muss wissen, ob es andere Methoden gibt, dies zu erreichen? Pseudocode oder tatsächlicher Code werden beide geschätzt.

    
Eternal Learner 12.11.2010, 05:14
quelle

4 Antworten

17
%Vor%     
R.. 12.11.2010, 05:24
quelle
9

Sie können dies erreichen, indem Sie jedes Zeichen der Zeichenfolge einmal aufrufen. Sie kopieren die Zeichenfolge im Grunde über sich selbst und überspringen die "Zeichen:

Pseudocode:

  1. Beginnen Sie mit zwei Zeigern: SOURCE und DESTINATION. Beide zeigen auf das erste Zeichen der Zeichenfolge.
  2. Wenn * SOURCE == NULL gesetzt * DESTINATION = NULL. Stopp.
  3. Wenn * SOURCE!="set * DESTINATION = * SOURCE und Inkrementieren DESTINATION.
  4. Erhöhen Sie SOURCE. Gehe zu Schritt 2.

code:

%Vor%

update : Fehler im Code behoben

    
Leftium 12.11.2010 05:29
quelle
0

Anstatt die Zeichen "vor Ort" zu verschieben, um das gelöschte Zeichen zu überschreiben, erstellen Sie eine neue Zeichenfolge.

Dies minimiert die Anzahl der kopierten Zeichen durch einmaliges Kopieren jedes gültigen Zeichens. Bei der ursprünglichen Methode werden Zeichen nahe dem Ende der Zeichenfolge n Male kopiert, wobei n die Anzahl ungültiger Zeichen davor ist.

    
wallyk 12.11.2010 05:23
quelle
0

Wenn Ihre Zeichenfolge nicht sehr groß ist, wäre die offensichtliche Antwort, eine separate Zeichenfolge zu haben.  Eine einzelne Schleife, bis Sie \ 0 (Ende der Zeichenfolge) erhalten Haben Sie eine Schleife (gibt Ihnen O (n)) und einen Vergleich, um zu überprüfen, ob der aktuelle Ort der Zeichenfolge das betreffende Zeichen ist (wieder O (n))

Insgesamt:

%Vor%

Beachten Sie, dass diese Methode nur funktioniert, wenn die Zeichenfolgen klein sind. Wir müssen bessere Methoden wählen, wenn die Größe der Saite zunimmt.

Hoffe, das hilft.

    
kjoshi 12.11.2010 05:32
quelle

Tags und Links