Ich versuche einen rekursiven Algorithmus zu erstellen, der ausgehend von einer Zeichenfolge wie "xxxzzppp" nur wahr zurückgibt, wenn jede Sequenz (kontinuierliche Teilzeichenfolge) derselben Charakter besteht aus weniger oder gleichwertigen Zeichen im Vergleich zu dem folgenden, bis zum Ende.Rekursiver Algorithmus für Teilstrings desselben Zeichens in C
Es wird angenommen, dass eine Zeichenfolge alphabetisch geordnet ist.
Es wird ansonsten 0
zurückgegeben.
Beispiel:
xxppp = 1; // by = I mean that it should return that value when given to the function
xxxp = 0;
nnnpppz = 0;
npz = 1;
npp = 1;
llleeeegggg = 1;
ich das versucht:
int CheckOcc(char seq[]) {
int j = 0, counter = 0;
if (strlen(seq) == 0)
return 100; //last is always shorter than nothing
for (j = 0; j < strlen(seq); j++)
if (seq[0] == seq[j])
counter++;
if (counter <= CheckOcc(seq + j))
return counter;
else
return 0;
}
Aber ich kann einfach nicht bekommen es funktioniert, kann jemand einen Vorschlag geben, bitte? Ich bin seit zwei Stunden drüber und kann es einfach nicht herausfinden.
EDIT:
Bitte beachten Sie, dass durch f + j vorbei, ich bin vorbei tatsächlich die stirng aus dem ersten Teilkette beginnend nach dem einen, der gerade zu Ende ist. Die Zeigeralgebra ist korrekt, ich kann den Algorithmus einfach nicht herausfinden, insbesondere weiß ich nicht, wie zu zurückzukehren. Jede Hilfe wird sehr geschätzt.
Leider @chux, ich Zählung statt Zähler geschrieben, während ich den nutzlosen Teil gelöscht wurde. Es wurde jetzt behoben. Der Code liefert Strings direkt von main in CheckOcc(), sie sind gültig, der Algorithmus funktioniert einfach nicht. – Athamas
Hmm willst du 'CheckOcc (seq + counter)' '? – chux
Ich möchte CheckOcc geben 1 (oder einen positiven Wert), gegeben eine Zeichenfolge, wenn die Zeichenfolge besteht aus Teilzeichenfolgen des gleichen Zeichens, die nie länger als die unmittelbar danach sind. Sonst 0. Bitte sehen Sie sich die Beispiele an, die schwer zu erklären sind. Bitte beachten Sie auch, dass die Strings korrekt sind. seq + counter vergleicht die Anzahl von der ersten mit der Zählung von der zweiten und so weiter. j zeigt auf, wo die Sequenz aufhört und eine neue durch Zeigeralgebra beginnt. Es ist das Beste, was ich mir ausgedacht habe. – Athamas