Zitat:
Ich hab's geschrieben, weil ich bei der Arbeit war und ihm nur einen Lösungsweg aufzeigen wollte. Bevor ich ihm über 2 Seiten meinen Lösungsweg erkläre, dachte ich, dass der Skriptweg der einfachste wäre. Hätte vielleicht schreiben sollen, dass es nur ein Denkansatz war.
Eigentlich wuerde ich an dieser Stelle sagen "dann schreib Pseudocode".
Zitat:
OK, ok , also ich hab es kompiliert und doch einen fetten Denkfehler gefunden. Arrays kann man direkt nicht vergleichen. Schade eigentlich... Und dann waren da noch ein paar Kleinigkeiten.
Nur nicht aufregen, Knighty, ich hab' ja nix gegen Dich. Ich bin oft so. =) Du wuerdest es schon merken, wenn es Dir an den Kragen geht.
Hier ein Vorschlag zu Guete. Meine erste Idee eines kleinen Dreizeilers geht in Small mangels Zeigern auch nicht. Daher hier mal der (korrekte) klassische Stringsearch zum drueber schlafen. Nicht so kompliziert denken, beim naechsten mal.
Code:
stock strstrcount(str[], search[]) {
new i = 0;
new j = 0;
new maxlen = strlen(str);
new maxlen2 = strlen(search);
new Count = 0;
for(i = 0; i <= maxlen-maxlen2; i++) {
for(j = 0; j <= maxlen2; j++){
if ( j == maxlen2 ) {
Count++;
break;
} // if
if ( str[i+j] != search[j] ) break;
} // for
} // for
return Count;
}
Zitat:
BTW, warum kann ich in Small die Arraylänge nicht in der Funktion vorgeben. Ich wollte sie gerne variabel von der Stringlänge wählen, kann aber nur mit bereits festgelegten
Konstanten arbeiten. Mich würde interessieren, was hinter diesem Konzept steht.
Oje *stoehn* einfache Antwort: weil es nicht so implementiert ist.
Andeutung der Problematik: Weil der Heap in der AMX eigentlich nur ein erweiterter Stack ist. Schon mal von gehoert, Heap und Stack? Es lassen sich viele Gruende finden. Small ist nun mall Small C. Da ist das ebenso. Und von VLAs in C99 will ich nun wirklich nicht anfangen, das fuehrt zu weit. Unterm Strich: ist halt so.
Oder Du fragst den Author.