Comment dire! = 0-9 en c ++

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; }