![]() |
c++ Beispielfrage...
Könnt mir jemand in verständlichen Worten Erklären was ich beim 11. Beispiel genau tun soll? :rolleyes:
"Schreiben Sie eine Funktion sort(char string[]), das die Zeichen in der als Parameter übergebenen Zeichenkette sortiert." http://www.pri.univie.ac.at/~itep/ws0304/hue/hue06.html Wie sollen also die eingegebenen Zeichen sortiert werden? Könnte das jemand anhand eines Beispiels erklären? |
Du sollst das Zeichen 'a' vor das Zeichen 'b' reihen, wenn diese beiden Zeichen in der übergebenen Zeichenkette vorkommen usw.
Ein Beispiel: Übergabe -> samba Ergebnis -> aabms Alles klar ?! Code:
void sort (char string[]) mfg Kikakater |
Achsoo also in alphabetischer Reihenfolge ausgeben, können die das nicht dazuschreiben?! :rolleyes:
Übrigens danke für dein Code, aber versteh ich ihn wieder nicht... :rolleyes: Was ist strlen? |
Zitat:
|
für lange Zeichenketten gibt es eine schnellere Variante:
Code:
#include <string.h> |
2 Fehler:
Falsch: for(i=0;i<255;i++) Richtig: for(i=0;i<=255;i++) - Falsch: for(i=0, pos=0;i<255;i++) Richtig: for(i=1, pos=0;i<=255;i++) ~ mfg Kikakater |
Außerdem muß folgende Zeile geändert werden:
Falsch: tabelle [string[i]] ++; Richtig: tabelle [ (unsigned char)string[i] ] ++; Es ist ein CASTen (ein Umtypisieren) notwendig, da für Zeichencodes > 127 - z.B. Umlaut A - ein negativer Index für das Array tabelle in der Funktion (besser Prozedur genannt da sort keinen Rückgabewert hat --> eben "void" sort (char string[])) herauskommt ! Der Wertebereich von char geht von -128 bis 127. Für tabelle[i], also das i (den Index) braucht man aber die Werte 1-255. Null zählt ja nicht, weil es (das Zeichen NUL (=binäre Null)) den Abschluß eines ASCII C Strings bildet. Deswegen braucht man das Element tabelle[0] nicht. Oder: tabelle [ ((unsigned char)string[i])-1 ] ++; schreiben. Dann stimmen die sogenannten beiden fehlerhaften Zeilen wieder. |
Ich würde es aber nach Variante 1 machen, weil man sich die dauernde Subtraktion von 1 in der Zeile
tabelle [ ((unsigned char)string[i])-1 ] ++; erspart. Die Anzahl der Elemente von tabelle muß von 255 auf 256 erweitert werden - mit Element 0 als quasi nutzlosem Element. static int tabelle[256], akt_char; // static, weil schneller außerdem würde ich nicht static verwenden, weil das Feld tabelle sonst am Heap und nicht am Stack abgelegt wird (=Speicherplatzverschwendung). akt_char wird nicht verwendet und ist demnach obsolet. |
Zitat:
Was macht die ganzzahlige Variable "nochmal"? Sie wird unten mit 1 initialisiert, was hat das für einen Zweck? Sorry, ich check diesen Algorithmus nicht ganz... Achja und noch eine Frage: Wieso hat die Funktion void (if(len<2) return; ) einen Rückgabewert? |
Hat sie doch eh nicht.
In diesem Fall bedeutet return einfach nur, daß die Funktion verlassen wird. Denk dir dort halt ein stop, break oder sonst was. Jak |
Alle Zeitangaben in WEZ +2. Es ist jetzt 20:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag