C Teilstrings / C-string-slicing?
Hy everybody!
Ich versuche, ein Programm zu schreiben, dass prüft ob eine gegebene Zeichenkette ist ein Palindrom (dazu habe ich aus einer Funktion, die aufgerufen wird is_palindrome, das funktioniert) und wenn Sie sich in einem der Teilzeichenfolgen ist ein Palindrom, und ich kann nicht herausfinden, was ist der optimale Weg, dies zu tun:
Z.B. für den string s = "abcdefg" es sollte zunächst prüfen, "a", dann "ab", "abc", "abcd" und so weiter, für jedes Zeichen
In Python this is the equivalent of
s[:1], s[:2], ... (a, ab, ...)
s[1:2], s[1:3] ... (b, bc, ...)
Welche Funktion/Methode ist es, die ich nutzen kann in einer ähnlichen Art und Weise, in C ?
- Wenn Sie wollen nicht (oder können nicht) ändern Sie die Quell-Zeichenfolge, die Sie brauchen, um Kopien von jeder substring, z.B. mit strndup(s+start,Länge), wenn Sie sind auf Linux. Benötigen Sie zum extrahieren von Teilstrings? Sie können nur das vergleichen von Sequenzen von Zeichen, die in-place?
- C ist nicht die Sprache, ich würde suchen für ausgefallene string-handling. Müssen Sie index all die Zeichenketten manuell eingeben.
- Ihre Funktion kann nur wieder den Wert der "der string ist nicht leer"; jeder nicht-leere string eine Teilzeichenfolge, die ein Palindrom ist (da jede Länge-1 substring tun wird).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese
slice_str()
Funktion wird der trick, mitend
eigentlich der Ende-Zeichen, statt einer-vorbei-das-Ende wie in Python slicing:die, wenn Sie aus den oben
main()
- Funktion, Ausgänge:Gibt es nicht; haben Sie Ihren eigenen schreiben.
Um zu überprüfen, die eine Zeichenfolge, die Sie zur Verfügung stellen müssen, um die Anzahl der Zeichen zu überprüfen, um zu überprüfen, ob ein Palindrom:
nun müssen Sie die Funktion aufrufen, die oben für jeden substring (wie du es beschrieben hast, d.h. immer vom Anfang an) z.B.
disclaimer: nicht kompiliert.
Ehrlich, Sie brauchen nicht, eine string-slicing-Funktion nur um zu überprüfen, Palindrome innerhalb von Teilstrings:
Mit, dass, können Sie die folgenden:
Natürlich, wenn Sie wirklich wollten, ein string-slicing-Funktion nur für die Ausgabe (da Sie technisch sollte das nicht wirken, eine
size_t
zuint
), und Sie wollen immer noch in der Lage sein, um die Ausgabe zu formatieren leicht, die Antwort von Paul Griffiths sollten reichen ganz gut, oder können Sie mir oder auch einerstrncpy
oder die nicht-Standard -strlcpy
, obwohl Sie alle haben Ihre stärken und Schwächen:strslice
tatsächlich funktioniert wie eine Kombination vonstrncpy
und die nicht-Standard -strlcpy
, obwohl es Unterschiede zwischen diesen drei Funktionen:strlcpy
schneiden Sie die kopierte Zeichenfolge kurz-fügen Sie eine null-terminator andest[n - 1]
, so kopieren genaun
bytes vor dem hinzufügen der null-terminator erfordert, dass Sie passn + 1
als die Größe des Puffers.strncpy
darf nicht die Zeichenkette beenden an alle, verlassendest[n - 1]
gleichsrc[n - 1]
, so würden Sie brauchen, um hinzuzufügen, ein null-terminator selbst, nur für den Fall. Wennn
größer ist als diesrc
Länge der Zeichenfolge,dest
wird aufgefüllt mit null-Abschlusszeichen bisn
bytes geschrieben wurden.strslice
wird, kopieren Sie bis zun
bytes, falls erforderlich, wiestrncpy
und erfordert ein zusätzliches byte für das null-terminator, also ein maximum vonn+1
bytes notwendig. Sie nicht verschwenden Zeit mit dem schreiben von unnötigen null-terminatoren alsstrncpy
tut. Dies kann gedacht werden als eine "leichtestrlcpy
" mit einem kleinen Unterschied in dem, wasn
Mittel und können verwendet werden, wobei der resultierende string-Länge keine Rolle.Könnte man auch eine
memslice
Funktion, wenn Sie wollte, die es erlauben würde, für eingebettete null-Byte, aber es existiert bereits alsmemcpy
.Gibt es keine built-in Funktion/Methode in einem standard-C-Bibliothek, die können damit umgehen. Sie können jedoch Ihre eigene Methode, das gleiche zu tun.