Bonjour,
J'ai une chaine de caractère à parser qui représente une liste de nombre. Cette chaine ne contient pas d'espace et chaque nombre est séparé par le caractère ',' ou '-'.
Le résultat est stocké dans la variable valRet (signed int de 32bits). Si j'ai le nombre 1 dans ma chaine, alors je dois mettre le premier bit de valRet à 1; si j'ai le nombre 2 dans ma chaine, alors je dois mettre le second bit de valRet à 1...
Donc :
si j'ai la chaine "1,3,4,11", je dois avoir comme résultat 0b10000001101 (nombres 1 et 3 et 4 et 11)
si j'ai la chaine "1-3", je dois avoir comme résultat 0b111 (nombres de 1 à 3)
=> J'espère que vous avez compris le principe
Autres règles :
- Si j'ai une erreur de parsing, je dois avoir comme valeur de retour -1.
- Si j'ai la chaine "none", je dois avoir comme valeur de retour 0 (designe une liste vide).
- Si j'ai la chaine "all", je dois avoir comme valeur de retour 0x7FFFFFFF (désigne tous les éléments de la liste).
=> vu que j'utilise un signed int de 32 bits, je dois donc générer une erreur s'il y a un nombre supérieur à 31 ou inférieur à 1.
Je pensais partir sur l'utilisation de sscanf mais a priori ce n'est pas le bonne méthode : comment feriez vous ?
--------------------------------
Amélioration de mon algo :
J'aimerais aussi pourvoir rajouter des noms pour définir un nombre (ex: toto = 1, tutu = 3, ...).
si j'ai la chaine "toto,tutu,4", je dois avoir comme résultat 0b1101 (nombres 1 et 3 et 4)
Mon algo ne doit pas être sensible à la casse.
Merci d'avance
PS : je ne dois pas utiliser de malloc car je programme sur un µControlleur
Partager