convertir cadena a int usar sstream

Queremos convertir cadenas a int usando corriente.

Pero no sabemos si nuestra cadena tiene un número entero o no, por ejemplo, puede ser el "hola 200" y queremos 200 en eso, o puede ser "Hola" y ahi estaba sin solución!

Tengo este código cuando solo tenemos un número entero en la cadena:

inline int string_to_int(string s)
{
    stringstream ss(s);
    int x;
    ss >> x;
    return x;
}

Ahora, si s = "¡hola 200!" o s = "hola", ¿cómo podemos hacer eso?

preguntado el 21 de septiembre de 13 a las 12:09

3 Respuestas

Una posibilidad simple que ignora las malas entradas hasta el primer entero en una cadena:

bool string_to_int(string str, int &x)
{
    istringstream ss(str);

    while (!ss.eof())
    {
       if (ss >> x)
           return true;

       ss.clear();
       ss.ignore();
    }
    return false; // There is no integer!
}

Respondido el 22 de Septiembre de 13 a las 07:09

Escriba un analizador basado en una máquina de estados finitos y corrija cualquier entrada como desee:

int extract_int_from_string(const char* s) {
   const char* h = s;
   while( *h ) {
      if( isdigit(*h) )
         return atoi(h);
      h+=1;
   }
   return 0;

} ... int i = extract_int_from_string("hola 100");

Respondido el 21 de Septiembre de 13 a las 12:09

¿Y no necesitamos indexar un número entero en una cadena? - Amirhossein Mahdinejad

No estoy seguro de haber entendido bien tu pregunta. ¿Qué quieres decir? - AnatolyS

 //You can use the following function to get the integer part in your string...
    string findDigits(string s){
    string digits="";
    int len=s.length();
    for(int i=0;i<len;i++){
        if(s.at(i)>='0' && s.at(i)<='9')
        digits+=s[i];}
     return digits;}

// and call the above function inside this function below...
    int string_to_int(string s){
    string digits=findDigits(s);
    stringstream ss(digits);
    int x;
    ss >> x;
    return x;}

Respondido 14 Feb 18, 07:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.