C-Programm zu entfernen, wiederholt char aus einem string

Stieß ich auf eine interview-Frage, die gestellt zu löschen, der wiederholte Zeichen aus einer angegebenen Zeichenfolge, in-place.
Also, wenn die Eingabe war "Hallo" die Ausgabe zu erwarten war "hi ter". Es wurde auch gesagt, um zu prüfen, nur alphabetische repititions und alle
Alphabete wurden Kleinschreibung. Ich kam mit dem folgenden Programm. Ich habe Kommentare zu machen, meine Logik, klar. Aber das Programm funktioniert nicht wie expectd für einige Eingaben. Wenn die Eingabe "hii" es funktioniert, aber wenn die "hi there" gelingt es nicht. Bitte helfen Sie.

#include <stdio.h>
int main() 
{
    char str[] = "programming is really cool"; //original string.
    char hash[26] = {0}; //hash table.
    int i,j; //loop counter.
//iterate through the input string char by char.
for(i=0,j=0;str[i];)
{
    //if the char is not hashed.
    if(!hash[str[i] - 'a'])
    {
        //hash it.
        hash[str[i] - 'a'] = 1;
        //copy the char at index i to index j.
        str[j++] = str[i++];
    }
    else
    {
        //move to next char of the original string.
        //do not increment j, so that later we can over-write the repeated char.
        i++;
    }
}

//add a null char.
str[j] = 0;

//print it.
printf("%s\n",str); //"progamin s ely c" expected.

return 0;

}

  • Haben Sie einen Tippfehler gemacht in der erwarteten Ausgang; sollte es nicht sein "Hallo" -> "Hallo ter" oder "Hallo" -> "Hi ther"?
  • Dass man Funktionen, die ein assoziatives array ist, aber definitiv nicht eine hash-Tabelle.
InformationsquelleAutor Zacky112 | 2010-02-11
Schreibe einen Kommentar