Convertir un caractère en un entier en C++
Comment puis-je régler chaque caractère dans une chaîne en entier? C'est juste la première chose que j'ai à faire dans l'ordre pour écrire une fonction de hachage. Je dois mettre chaque caractère dans une chaîne en entier afin que je puisse somme de leurs valeurs. S'il vous plaît aider! C'quelque chose comme ça???
int hashCode(string s)
{
int Sum = 0;
for(int i=0; i<strlen(s); i++)
{
Sum += (int)s[i];
}
return Sum;
}
strlen(std::string)
? Dire quoi?- Quelque chose comme ça, oui. Vous devez rechercher la classe string bien que pour savoir comment obtenez correctement la longueur.
- avez-vous eu un coup d'oeil à ceci avant que vous avez commencé à vous faire votre propre fonction de hachage?
- Évidemment, ce sont les devoirs. OP, votre professeur peut très bien vous apprendre à écrire du code comme ce que vous êtes un débutant, mais il faut être conscient que cela ne serait pas être considérés comme la qualité de la production de code en plus C++ équipes.
- oui. Je suis un peu en pensant que. Mais le truc, c'est que je me suis donné un peu de code. et dit à y ajouter. donc je ne peux pas juste faire ce que je veux.
Vous devez vous connecter pour publier un commentaire.
Oui -- en C et C++,
char
est juste un petit type entier (généralement avec une gamme allant de -128 à +127). Quand vous faire des maths sur elle, il va normalement être convertis àint
automatiquement, donc vous n'avez même pas besoin de votre fonte.Comme un de côté, vous ne voulez vraiment pas à utiliser
strlen(s)
à l'intérieur de la condition d'arrêt pour vos boucle. Au moins avec la plupart des compilateurs, cela va l'obliger à re-évaluéstrlen(s)
chaque itération, de sorte que votre algorithme linéaire est devenu quadratique à la place.Ou, si
s
est en fait unstd::string
, comme le type de paramètre suggère:Encore une possibilité:
std::accumulate()
-- "vous ne voulez vraiment pas à utiliserstrlen(s)
à l'intérieur de la condition d'arrêt pour vos boucle" IME les compilateurs sont assez intelligents pour savoir si elles peuvent soulever que hors de la boucle, la plupart du temps.Les personnages sont généralement représentés en interne par des entiers,
s[i]
peut être attribué à un entier.Si vous avez char
'1'
, et que vous souhaitez stocker int1
, alors vous pouvez faires[i]-'0'
.Vous pourriez être à la recherche pour
Pour le cas général de la conversion de nombres en chaînes et vice versa voir cette entrée de la FAQ.
La fonction que vous cherchez est sscanf.
Vous trouver dans l'en-tête
stdio.h
et il est défini comme ceciDans votre cas vous pouvez l'utiliser comme ceci:
Si votre chaîne pas compose seulement de votre choix integeer vous devez adapter les paramètres. Vous pouvez ensuite modifier le premier paramètre de sorte qu'il pointe directement vers la partie de la chaîne à l'endroit où votre numéro de mensonges ou vous devez adapter la chaîne de format. En outre, vous devriez vérifier la valeur de retour alors.
Vous pouvez utiliser strtol ou, puisque c'était marqué C++, une chaîne de stream.
atol
.strtol
, si vous devez vraiment, mais pour le hachage, vous pourriez aussi bien ne pas convertir à tous.Et la réponse est (je pense)
Btw atoi position pour ascii Entier.
Accoarding pour Chat de Plus en Plus atoi n'est pas pris en charge, probablement. Afin de mieux vous ne l'utilisez pas alors 😉
atoi
. Elle est cassée et ne peut pas communiquer correctement les erreurs.