convertit une chaîne de size_t
Est-il un moyen de convertir std::string
à size_t
?
Le problème est que size_t
est une plate-forme fiable de type (alors qu'il est le résultat de la sizeof
). Donc, je ne peux pas garantir que la conversion de string
à unsigned long
ou unsigned int
va le faire correctement.
EDIT:
Un cas simple est:
std::cout<< "Enter the index:";
std::string input;
std::cin >> input;
size_t index=string_to_size_t(input);
//Work with index to do something
Qu'entendez-vous par la conversion de
Jetez un oeil à en.cppreference.com/w/cpp/string/basic_string/stol
Quel est l'arrêt de quelqu'un à partir de la saisie d'un grand nombre qui dépasse votre numérique des limites?
Ce un autre problème. Pour l'instant, est-il un stol comme méthode de travail pour size_t
Quel est le problème de faire juste
string
à size_t
sont que vous essayez de convertir une chaîne de chiffres? S'il vous plaît poster un peu de code et d'expliquer ce que vous demandezJetez un oeil à en.cppreference.com/w/cpp/string/basic_string/stol
Quel est l'arrêt de quelqu'un à partir de la saisie d'un grand nombre qui dépasse votre numérique des limites?
Ce un autre problème. Pour l'instant, est-il un stol comme méthode de travail pour size_t
Quel est le problème de faire juste
size_t index; cin >> index;
?OriginalL'auteur Humam Helfawi | 2015-12-02
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
%zd
comme le spécificateur de format dans unscanf
-type d'approche.Ou utiliser un
std::stringstream
qui ont une surcharge>>
àsize_t
.operator >>
pourstd::size_t
. Voir ici.Ce que j'ai compris, Il n'y a pas de surcharge pour size_t... mais depuis Size_t est uint ou ulong ou ulongong... il serait travailler pour le bon type size_t ?
Dans la mesure où std::size_t sera probablement (peut-être certainement; besoin de vérifier) être définie en termes de l'un de la primitive intégrale types, il y en aura. Une erreur de compilation si pas.
Oui je pense que cela devrait fonctionner parfaitement. merci
Je n'ai que le C99 papier ici, mais qui ne dit rien à propos de
size_t
sauf si elle est définie, que c'est un type entier non signé, le type de retour desizeof()
, et a une valeur maximum (SIZE_MAX
) pas moins de 65535.OriginalL'auteur Bathsheba
Vous souhaiterez peut-être utiliser
sscanf
avec le%zu
prescripteur, qui est pourstd::size_t
.Ont un look ici.
Littéralement, je doute qu'il y a une surcharge
operator >>
destd::basic_istringstream
pourstd::size_t
. Voir ici.%Iu
spécificateur mais je développe sur un système Windows. Voir Travailler avec le type size_t dans les fonctions prinft, scanf et des fonctions similairesOriginalL'auteur Lingxi
vous pouvez utiliser
std::stringstream
OriginalL'auteur Yuriy Orlov
Admettons pour un instant que
size_t
est un typedef pour un existant entier, c'est à dire de la même largeur que soitunsigned int
,unsigned long
, ouunsigned long long
.AFAIR il pourrait être séparé (encore plus important) type d'aussi loin que la formulation est concerné, mais je considère que pour être hautement improbable.
De travail avec cette hypothèse, que
size_t
n'est pas plus queunsigned long long
, soit stoull ou strtoull avec la suite en fonte àsize_t
devrait fonctionner.De la même hypothèse (
size_t
défini en termes deunsigned long
ouunsigned long long
), il y serait être unoperator>>
surcharge de ce type.J'avais dodu pour
%zd
: qui a été autour depuis le standard C99. Pas sûr que le C++ mais j'imagine que c'est autour de fort-la même quantité de temps.J'ai un profond, presque génétique de l'aversion pour l'ensemble de la
*scanf()
de la famille. J'ai justement mise en œuvre, il n'est donc pas une aversion de l'ignorance, mais tout le contraire. Je pourrais utilisation dans un pincement, mais vous n'aurez plus jamais me voir recommander à personne, surtout pas dans un C++ contexte. 😉Je suis d'accord avec vous même si je ne peux pas prétendre avoir mis en oeuvre la famille moi-même. Mais je pense que ce cas particulier est une exception à la règle. Plus un, puisque vous répondez évidemment contient les profondeurs cachées de l'
href="http://stackoverflow.com/questions/1425730">SI la question par moi-même, de retour à partir de quand j'ai été la mise en œuvre de
*scanf()
. Le résumé est que la chaîne d'entrée"0xz"
, si analysée par*scanf()
, est une erreur de corrélation en laissant l'argument undefined (entrée et le pointeur à'x'
...) à moins, bien sûr, vous êtes à la recherche à la non-conformité de la mise en œuvre comme glibc-2.8 ou newlib 1.14. 😉 C'est seulement chose qui m'a fait détester*scanf()
. 😉OriginalL'auteur DevSolar
Par l'utilisation de l'iss.fail(), vous vérifiez l'échec.
Au lieu de ("un"), l'utilisation de la valeur que vous voulez convertir.
OriginalL'auteur selin kamaş