Ich denke, Ihre eigene Funktion bauen, die duplizierten Zeichen entfernt Ihnen helfen würde, in das erreichen, was Sie zu tun versuchen. Aber es gibt keine Standardfunktion, die Ihnen helfen würde, alle Duplikate aus einer Zeichenkette zu entfernen. Versuchen Sie also, eine Funktion zu konstruieren, die alle doppelten/wiederholten Zeichen aus einer Zeichenkette entfernt und die Zeichenkette zurückgibt. Hier ist, was Ihre Funktion aussehen würde:
char* remove_duplicated(char* str, int size) {
int frequency[256] = {0};
char* new_str = malloc(size);
int new_size = 0;
for(int i=0; str[i]!='\0'; i++)
{
if(frequency[(unsigned char) str[i]] == 0) {
frequency[(unsigned char) str[i]]++;
new_str[new_size] = str[i];
new_size++;
}
}
new_str[new_size] = '\0';
return new_str;
}
Sobald Sie die obige Funktion aufgebaut haben, senden Sie die Zeichenfolge in dem Sie die Frequenzen der Zeichen gemessen haben wollen und speichern Sie die zurückgegebene Zeichenfolge. Etwas wie folgt aus:
char* new_str = remove_duplicated(str, size);
Jetzt im Doppel for
Schleife, die Sie verwenden, verwenden new_str
für Ihre äußere for-Schleife und es auch für die for
Schleife verwenden Anzeigen count
for(i=0; new_str[i]!='\0'; i++)
{
for(j=0; str[j]!='\0'; j++)
{
if(new_str[i] == str[j])
count[i]++;
}
}
for(i=0; new_str[i]!='\0'; i++)
printf("%c occurs %d times \n", new_str[i], count[i]);
nicht vergessen
free(new_str);
Hier ist eine Online-Demo: die malloced Array in der remove_duplicated Funktion frei https://ideone.com/KnkwGX
Was ist die Definition von 'count'? Dein Code berechnet tatsächlich etwas völlig Zufälliges. Sie brauchen die innere Schleife nicht, aber Sie brauchen ein Array von Zahlen, wobei der Index 'str [i]' ist - der ASCII-Code des 'i'ten Zeichens in der Zeichenkette. – DyZ
like [this] (http://ideone.com/Ns9quD) – BLUEPIXY
@DYZ: Völlig zufällig ist nicht genau - es ist definiert, aber nicht was gewünscht wird. Ich stimme zu, dass die doppelte Schleife unnötig ist, aber Sie haben Ihren Fall überbewertet. Für einen zweimal erscheinenden Brief beträgt die Anzahl 4; für einen Brief, der dreimal erscheint, wird die Zählung 9 sein; Für einen Buchstaben, der N-mal erscheint, wird die Zählung N² sein. –