De nombreuses langues ont des fonctions pour convertir la chaîne en entiers et inversement. Alors qu'est-ce qui se passe là-bas? Quel algorithme est exécuté lors de la conversion? P>
Je ne demande pas dans une langue spécifique parce que je pense que cela devrait être similaire dans tous. P>
3 Réponses :
Je n'appellerais pas cela un algorithme en soi em>, mais en fonction de la langue, cela impliquera la conversion de caractères en équivalent intégral. De nombreuses langues s'arrêteront sur le premier caractère qui ne peuvent pas être représentées comme un entier (par exemple, la lettre A code>), convertiront aveuglément tous les caractères en valeur ASCII (par exemple, la lettre
A code > devient
97 code>), ou ignorera les caractères qui ne peuvent pas être représentés comme des entiers et convertir uniquement ceux qui peuvent - ou renvoyer 0 / vide. Vous devez devenir plus spécifique sur le cadre / la langue pour fournir plus d'informations. P>
chaîne en intiqueger: p>
Beaucoup de langues (la plupart) représentent des chaînes, sur un niveau ou un autre, en tant que tableau (ou liste) de caractères, qui sont également des entiers courts. Mappez les celles correspondant aux caractères numériques à leur valeur de numéro. Par exemple, '0' en ASCII est représenté par 48. Vous pouvez donc mapper 48 à 0, 49 à 1, et ainsi de suite à 9. P>
À partir de la gauche, vous multipliez votre total actuel de 10, ajoutez la valeur du caractère suivant et passez à autre chose. (Vous pouvez créer une carte plus grande ou plus petite, modifiez le numéro que vous multipliez à chaque étape et convertissez des chaînes de n'importe quelle base que vous aimez.) P>
Entier à la chaîne est un processus plus long impliquant la conversion de base à 10. Je suppose que, puisque la plupart des entiers ont des bits limités (32 ou 64, généralement), vous savez qu'il arrivera à un certain nombre de personnages au plus dans une chaîne. (20?). Donc, vous pouvez configurer vos propres additionneurs et itérer à chaque endroit pour chaque bit après avoir calculé sa valeur (2 ^ Place). P>
Pour convertir une chaîne en un entier, prenez chaque personnage à tour de rôle et si c'est dans la plage '0' à travers '9', convertissez-la à son équivalent décimal. Habituellement, c'est simplement soustraire la valeur de caractère de '0'. Maintenant, multipliez tous les résultats précédents de 10 et ajoutez la nouvelle valeur. Répétez jusqu'à ce qu'il n'y ait pas de chiffres. S'il y avait un signe "-" de premier plan, inverser le résultat.
Pour convertir un entier en une chaîne, commencez par invoquer le numéro s'il est négatif. Divisez l'entier de 10 et économisez le reste. Convertissez le reste en un caractère en ajoutant la valeur de caractère de '0'. Poussez ceci au début de la chaîne; Répétez maintenant avec la valeur que vous avez obtenue de la division. Répétez la répétition jusqu'à ce que la valeur divisée soit zéro. Éteindre un "-" minus signe si le nombre a commencé négatif. P>
Voici des implémentations concrètes à Python, qui, à mon avis, est la langue la plus proche du pseudo-code. P>
def string_to_int(s): i = 0 sign = 1 if s[0] == '-': sign = -1 s = s[1:] for c in s: if not ('0' <= c <= '9'): raise ValueError i = 10 * i + ord(c) - ord('0') return sign * i def int_to_string(i): s = '' sign = '' if i < 0: sign = '-' i = -i while True: remainder = i % 10 i = i / 10 s = chr(ord('0') + remainder) + s if i == 0: break return sign + s
Ce n'est pas "son équivalent décimal" - il convertissait le caractère du chiffre à un nombre.