Je suis un débutant à C ++ alors pardonnez-moi si je fais une erreur stupide ici.
Je veux faire boucle à travers une chaîne d'entiers dans le code suivant: p> mais je reçois la sortie: P> 49
50
51
52
53
4 Réponses :
Lorsque vous faites boucle via une chaîne code>, vous obtenez des éléments de type char code>. Si vous convertissez un
char code> à un
int code> Vous obtenez la valeur ASCII du
Char code>, ce qui se passe lorsque vous faites:
string str = "12345";
for (int i : str) { // each char is explicitly converted to int
cout << i << endl; // prints the ascii value
}
Juste ce que @Cigien a dit, il vous suffit de le modifier de Int vers Char à la version
string str = "12345"; for (auto i : str) { cout << i << endl; }
La première chose à savoir que vous devez savoir est qu'une chaîne est une matrice / séquence de caractères. Vous pouvez penser à un caractère comme un seul caractère. Mais la façon dont il est codé est un nombre. Par exemple, le char "A 'est codé (en ASCII) comme numéro 97.
Maintenant, votre boucle indique Maintenant, les chiffres sont codés avec le char "0 'ayant la valeur de codage la plus basse,
'1' ayant la valeur suivante,
'2', ayant le prochain,
et ainsi de suite à travers le chiffre '9'.
Je ne peux jamais me souvenir de la valeur ASCII réelle pour '0'. . . .
Mais comme les caractères chiffres sont codés consécutivement de cette manière,
Vous pouvez convertir n'importe quel caractère de chiffre de la valeur INT en soustrayant la valeur d'encodage entier sous-jacente de '0'. P> int i: str code>.
Vous dites à rechercher les entiers em> dans la chaîne.
Mais une chaîne est une matrice / séquence de caractères, pas d'entiers.
Donc, la boucle prend chaque caractère,
et au lieu de regarder ce que le personnage lui-même em> est,
Il vous donne la valeur encodante entier du char,
la valeur ASCII. p>
#include <string>
using namespace std;
int main() {
string str = "12345";
for (char c: str) {
cout << (c - '0') << endl; // gives you the actual int value, but only works if the char is actually a digit
}
return 0;
}
mais le pour (int i: str) { code> est en infraction de sucre syntaxique pour
* code> -opérateur de chaîne :: Itérateur infecte une surcharge qui retourne le caractère actuel. Ce sera en tant que tel casé à un int. Ce que vous voyez alors est ce numéro. C'est la valeur entière de l'octet. Pas nécessairement ascii. Il pourrait aussi être ansi. P> p>
Vous voyez des valeurs ascii pour les caractères. Voir ascitable.com
Essayez le char au lieu de l'int.
Un emporter utile de cette expérience est que vous pouvez soustraire la valeur du
'0' code> (48 dans le cas de l'ASCII, mais vous préférez presque toujours utiliser
'0' Code> Parce qu'il est plus facile de lire) caractère à partir d'un chiffre et vous obtiendrez la valeur numérique du chiffre.
Votre chaîne ne contient pas
int code> s. Il contient
char code> s.