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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
wenn
str[i]
ist eine non-alphabet, sagen, ein Raum und wenn Sie das tun:Ihrem Programm Blasen kann.
ASCII-Wert von
space
ist32
und dera
ist97
so sind Sie effektiv den Zugriff auf hash-array mit einem negativen index.Um dieses Problem zu lösen Sie können Sie ignorieren, nicht-Alphabete by doing :
Dies ist zu brechen auf alle Leerzeichen (oder irgendetwas anderes außerhalb des Bereichs 'a'..'z'), weil Sie den Zugriff auf die außerhalb der Grenzen Ihres hash-array.
Dies ist der code, golf, richtig?
...
...