Dupliquer possible:
comment vérifier si une chaîne c ++ ou un caractère * donné ne contient que des chiffres?
J’essaie de dire ça
if(ssortingng.at(i) != 0-9){ b= true; }
Existe-t-il un moyen de dire cela sans saisir la valeur! = 0 && valeur! = 1 … etc? De plus, si cela existe et est possible, et que ce soit différent en java, cela me serait également utile.
Merci les gars sont toujours utiles.
C ++:
#include using namespace std; ... if (!isdigit(str[i])) // or if (str[i] < '0' || str[i] > '9')
Java:
if (!Character.isDigit(str.charAt(i)))
Prononcez la ssortingng[i] < 0 || string[i] > 9
ssortingng[i] < 0 || string[i] > 9
.
Assurez-vous que vous voulez réellement dire 0
(la valeur), et non pas '0'
(le caractère du chiffre pour zéro). Dans ce dernier cas (comme vous le suggérez dans le commentaire), vous voulez une ssortingng[i] < '0' || string[i] > '9'
ssortingng[i] < '0' || string[i] > '9'
. (Les chiffres sont garantis pour être contigus et ordonnés dans n’importe quel encodage de texte, donc cela fonctionne sur n’importe quelle plate-forme.)
Si la chaîne était “0983”, je veux que ce soit vrai, mais si “124Test” soit définie, je veux qu’elle rest fausse.
En disant cela, une approche consisterait à vérifier si un caractère n’est pas un nombre, puis à renvoyer false au lieu de vérifier chaque caractère jusqu’à la fin de la chaîne.
bool b = true; for(int i = 0; i < string.size(); i++) { if(string.at(i) < '0' || string.at(i) > '9') { b = false; break; } }
Vous pouvez utiliser un abonnement à une collection:
!boost::empty(boost::find("0123456789", ssortingng.at(i)))
Pour la réponse C ++, regardez cette question qui a déjà résolu un problème assez similaire, que vous pouvez très facilement adapter à votre situation.
Quant à Java, vous pouvez le faire:
public boolean isInteger(Ssortingng s) { return s.matches("^[0-9]+$"); }
Vous pouvez modifier la regex pour répondre à vos besoins. Par exemple: "^[4-8]+$"
.
Remarque : Ssortingng.matches
n’est pas optimal. Si vous devez souvent effectuer des contrôles, utilisez plutôt un modèle compilé:
static final Pattern DIGITS = Pattern.comstack("^[0-9]+$"); public void isInteger(Ssortingng s) { return DIGITS.matcher(s).find(); }
C’est assez maladroit de dire qu’une solution ad hoc peut être plus facile à utiliser, mais la bibliothèque standard le supporte directement:
#include #include #include int main() { char *inputs[] = { "0983", "124test" }; std::locale loc(std::locale::classic()); std::ctype_base::mask m = std::ctype_base::digit; for (int i=0; i<2; i++) { char const *b = inputs[i]; char const *e = b + strlen(b); std::cout << "Input: " << std::setw(10) << inputs[i] << ":\t"; if (std::use_facet >(loc).scan_not(m, b, e) == e) std::cout << "All Digits\n"; else std::cout << "Non digit\n"; } return 0; }
Si vous utilisez C ++ 11, std::all_of
est certainement plus facile à utiliser:
#include #include #include #include #include int main() { std::ssortingng inputs[] = { "0983", "124test" }; std::cout << std::boolalpha; for (int i=0; i<2; i++) std::cout << std::setw(10) << inputs[i] << "\tAll digits?: " << std::all_of(inputs[i].begin(), inputs[i].end(), ::isdigit) << "\n"; return 0; }