55 votes

comment vérifier si une chaîne ou un char* donné en c++ ne contient que des chiffres ?

Ou dans l'autre sens, trouvez le premier caractère non numérique.

Les mêmes fonctions s'appliquent-elles aux chaînes de caractères et aux char* ?

1voto

Shakiba Moshiri Points 6556

#include <regex>

std::string string( "I only have 3 dollars!" );
std::cout << std::regex_search( string, std::regex( "\\d+" ) ); // true

y

std::string string( "I only have three dollars!" );
std::cout << std::regex_search( string, std::regex( "\\d+" ) ); // false

1voto

sh.e.salh Points 455

De la cplusplus.com vous pouvez utiliser la fonction isdigit comme suit :

// isdigit example (C++)
#include <iostream>       // std::cout
#include <string>         // std::string
#include <locale>         // std::locale, std::isdigit
#include <sstream>        // std::stringstream

int main ()
{
  std::locale loc;
  std::string str="1776ad";
  if (isdigit(str[0],loc))
  {
    int year;
    std::stringstream(str) >> year;
    std::cout << "The year that followed " << year << " was " << (year+1) << ".\n";
  }
  return 0;
}

Note : il existe 2 types d'isdigit ; l'autre version est indépendante du local et basée sur l'ASCII.

0voto

Yuushi Points 10656

S'il est impératif que vous puissiez trouver exactement où se trouve le premier chiffre qui n'est pas un caractère, vous devrez alors vérifier chaque caractère. Sinon, j'utiliserais quelque chose comme ceci :

unsigned safe_atoi(const std::string& a)
{
    std::stringstream s(a);
    unsigned b;
    s >> b;
    return b;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X