La création d'une pile de chaînes de caractères en C
Je veux avoir une pile qui prend des chaînes de caractères. Je veux être en mesure de push et pop de cordes à l'extérieur, ainsi que d'effacer l'ensemble de la pile. Je pense que C++ a quelques méthodes pour cela. Ce qui sur le C?
Si votre pile de copie de chaînes ou utiliser les pointeurs passés? Il est beaucoup plus facile avec juste de sauver les pointeurs, mais presque inutile, sauf si vous savez que vous travaillez avec des littéraux de chaîne et/ou
La pile doit copier les chaînes, parce que les chaînes d'origine peuvent être remplacés.
Rechercher
char *
pointeurs dont les chaînes ne vont pas changer, et les pointeurs ne va pas le devenir non valide lors de leur "stockage" sur la pile.La pile doit copier les chaînes, parce que les chaînes d'origine peuvent être remplacés.
Rechercher
strlen
+ malloc
+ strcpy
. Si vous avez strdup
, vous pouvez l'utiliser (pas en C ANSI, mais est POSIX.1), rendre les choses un peu plus facile pour vous. N'oubliez pas de free
les cordes lorsque vous faites pop
ou clear
.OriginalL'auteur neuromancer | 2009-12-17
Vous devez vous connecter pour publier un commentaire.
Quick-and-dirty non testé exemple. Utilise une liste liée individuellement structure, les éléments sont poussées sur et sauté par la tête de liste.
Modifier
Ce serait bien d'avoir un exemple de comment l'utiliser:
Vous pouvez déclarer les piles comme auto variables, plutôt que d'utiliser newStack() et destroyStack(), vous avez juste besoin de s'assurer qu'ils sont initialzed correctement, comme dans
Je suis juste l'habitude de créer des pseudo constructeurs/destructeurs pour tout.
OriginalL'auteur John Bode
Essayer GNU Obstacks.
De Wikipedia:
Exemple de Code à partir de Wikipedia:
De l'OMI, ce qui rend Obstacks spécial: Il n'a pas besoin
malloc()
nifree()
, mais la mémoire peut être alloué dynamiquement». C'est commealloca()
sur les stéroïdes. Il est également disponible sur de nombreuses plates-formes, car il est une partie de la Bibliothèque C de GNU. En particulier sur les systèmes embarqués, il peut être plus judicieux d'utiliser Obstacks au lieu demalloc()
.OriginalL'auteur nalply
Voir L'article de Wikipedia sur les piles.
Vous êtes les bienvenus. 🙂
OriginalL'auteur