J’ai conscience que ça ne parlera pas à tout le monde, du coup j’explique : dans le code legacy dans ma boîte (le code qui est là depuis longtemps), quelqu’un a créé une liste de tous les entier de 1 à 100 000 dans une base de données, puis dans le code quand on voulait vérifier qu’une chaine de caractères était un entier, on allait regarder dans cette base de données pour voir si la chaine de caractère y figurait.
On se moque, mais déterminer si un nombre est entier en informatique est historiquement très complexe, à cause de la façon dont les ordinateurs stockent les nombres à virgule.
Connais pas le C++ mais il y a pas de fonctions mathématiques ou de gestion de chaines de caractères (genre vérifier que chaque caractère est un chiffre, ou différent de , ou .) ?
J’espère que votre IT est préparée au bug de l’an 100000 quand même, ça va venir vite.
Pour ceux qui se souviennent du post “Honteux Bidouillage” de montages hardware dégueulasses sur HFR on devrait faire pareil avec la programmation, parce que là : “Comment vérifier si un nombre est un entier en C++ ?”, mais c’est très simple “Il suffit de faire une jointure avec cette table”.
Je ne suis pas devant un ordinateur pour te pondre un code testé qui te conviendra mais en attendant, tu peux tester cette idée :
Tu sembles chercher à valider des entiers naturels. Partant de là, il te suffit de reconnaitre que 1, le premier de cette liste est un entier valide, “et tous les autres par construction aussi”. Il te suffit donc de prendre en entrée le nombre que tu souhaites tester et de vérifier qu’il appartient à la suite des entiers naturels. En gros, il te faut une fonction récursive telle que celle-ci :
`bool IsNaturalInteger(float n)
{
if (n==1){return true;}
else
{
if (n<1){ return false;}
else {return IsNaturalInteger(n-1)}
}
}`
Édit : Le coût de cette fonction est élevé et la taille de la pile peut te limiter.
https://www.cplusplus.com/reference/string/stoi/ ? stoi te throw une exception si il arrive pas a convertir ta string en int. (sinon il y a atoi() qui est probablement plus performant mais qui tombe en UB si il arrive pas a convertir)
13 comments
J’ai conscience que ça ne parlera pas à tout le monde, du coup j’explique : dans le code legacy dans ma boîte (le code qui est là depuis longtemps), quelqu’un a créé une liste de tous les entier de 1 à 100 000 dans une base de données, puis dans le code quand on voulait vérifier qu’une chaine de caractères était un entier, on allait regarder dans cette base de données pour voir si la chaine de caractère y figurait.
On se moque, mais déterminer si un nombre est entier en informatique est historiquement très complexe, à cause de la façon dont les ordinateurs stockent les nombres à virgule.
Connais pas le C++ mais il y a pas de fonctions mathématiques ou de gestion de chaines de caractères (genre vérifier que chaque caractère est un chiffre, ou différent de , ou .) ?
J’espère que votre IT est préparée au bug de l’an 100000 quand même, ça va venir vite.
Pour ceux qui se souviennent du post “Honteux Bidouillage” de montages hardware dégueulasses sur HFR on devrait faire pareil avec la programmation, parce que là : “Comment vérifier si un nombre est un entier en C++ ?”, mais c’est très simple “Il suffit de faire une jointure avec cette table”.
Je me moque, désolé OP. J’ai trouvé cette [source](https://stackoverflow.com/questions/7646512/testing-if-given-number-is-integer) sinon.
Tu peux faire pareil avec les nombres premiers du coup.
Je suis sur que la bonne solution commence par :
template<typename T>
[removed]
Pour quoi faire ?
Ça me rappel ce projet: https://github.com/emuzulu/isEven
Je ne suis pas devant un ordinateur pour te pondre un code testé qui te conviendra mais en attendant, tu peux tester cette idée :
Tu sembles chercher à valider des entiers naturels. Partant de là, il te suffit de reconnaitre que 1, le premier de cette liste est un entier valide, “et tous les autres par construction aussi”. Il te suffit donc de prendre en entrée le nombre que tu souhaites tester et de vérifier qu’il appartient à la suite des entiers naturels. En gros, il te faut une fonction récursive telle que celle-ci :
`bool IsNaturalInteger(float n)
{
if (n==1){return true;}
else
{
if (n<1){ return false;}
else {return IsNaturalInteger(n-1)}
}
}`
Édit : Le coût de cette fonction est élevé et la taille de la pile peut te limiter.
Une fois que t’auras trouvé si le nombre est entier, tu peux vérifier s’il est pair avec cet astucieux package [is-even](https://github.com/samuelmarina/is-even/blob/main/index.js)
https://www.cplusplus.com/reference/string/stoi/ ? stoi te throw une exception si il arrive pas a convertir ta string en int. (sinon il y a atoi() qui est probablement plus performant mais qui tombe en UB si il arrive pas a convertir)