supprimer des voyelles dans une chaine de caracteres - ASM - Programmation
Marsh Posté le 05-03-2017 à 21:59:28
Salut. Plusieurs choses. Tu sembles dimensionner ta chaîne à 15 mais ce que tu mets dedans est plus long.
Ensuite c'est quoi qui indique la fin de ta chaine ? Un octet à zéro ?
Et puis sans connaître cet assembleur on a l'impression qu'en ligne 34 tu copies le caractère précédent dans cl et en 35 cl dans le caractère courant.
Si tu voulais supprimer le caractère c'est tout ce qui suit qu'il faudrait mettre dans le caractère précédent jusqu'au zéro final.
Marsh Posté le 05-03-2017 à 22:22:06
bonjour merci pour ton aide. ça marche maintenant ça fait L grand zorro mais quand ça revient dans le dwhile le i a changé ou le edi a changé et ça tourne en boucle et je sais pas où il est. mais bon ç'est un bon début car j'ai compris que je dois faire un décalage vers la gauche de tous les elements après avoir trouvé la voyelle...
Code :
|
Marsh Posté le 05-03-2017 à 22:27:09
voilà j'ai rajouté un branchement pour remettre le i à 0 et repasser dans la boucle dwhile
ça marche maintenant j'ai vu au débogueur
mais je dois faire un dernier truc pour qu'il sort de la boucle au cas où il trouve le caractère zero ou bien quand tout est fini ... je peux faire comment car au débugeur ça continue à boucler même quand toutes les voyelles ont disparu et que la chaine s'est bien decalée?? ou bien comment réduire la taille de mon vecteur ??? parce que au debogueur y a plusieurs 0 à la fin de la chaine (en fonction du nombre de voyelles que j'ai supprimé ? je suppose)
Code :
|
Marsh Posté le 06-03-2017 à 09:23:55
Normalement au premier trouvé lors du parcours, ça doit s'arrêter.
Une autre solution aurait été de copier les caractères un à un vers une nouvelle chaîne sauf les voyelles, sans doute plus facile.
Je ne vois pas de jump sur fin_bcl dans le cas d'un zéro
(je peux me tromper, l'assembleur j'en faisais dans les années 80 sur processeurs 6502/6510 donc je ne connais pas trop tes mnémoniques et je survole le code plus que je ne le lis)
Marsh Posté le 06-03-2017 à 09:29:26
Ça fait quoi mov i,0, tu mets 0 dans i ? Donc tu recommences ta boucle au début ?
Marsh Posté le 06-03-2017 à 10:14:41
Une meilleure solution: avoir 2 index sur la chaîne de caractère, source et destination.
On démarre avec:
source = destination = premier caractère de chaine
Boucle tant que @source est non null
Si le caractère @source n'est pas une voyelle, on copie @source dans @destination et on incrémente destination
Dans tous les cas on incrémente @source
Fin de boucle
Marsh Posté le 07-03-2017 à 15:27:44
J'ai pas testé:
Code :
|
Marsh Posté le 05-03-2017 à 19:22:26
Bonjour,
le code que j'ai ecrit supprime(ou plutot fait un mov du caractère qui se trouve dans la case avant la voyelle dans la case où est la voyelle) et ç'est pas ça ce que je voulais faire. Je voudrais trouver les voyelles dans ma chaine et les supprimer sans rien mettre à la place... peut être en reduisant la taille de la chaine de caractères ???
la graine de poivre doit devenir l grn d pvr