c++ - STD:: स्ट्रिंग की जांच कैसे करें यदि यह वास्तव में एक पूर्णांक है?




string integer (2)

निम्नलिखित कोड int को std::string को परिवर्तित करता है और समस्या यह है कि यह एक सच्चे पूर्णांक या सिर्फ एक यादृच्छिक स्ट्रिंग से नहीं जानती हो सकती है। क्या ऐसी समस्या से निपटने के लिए एक व्यवस्थित तरीका है?

#include <cstring>
#include <iostream>
#include <sstream>

int main()
{
    std::string str =  "H";

    int int_value;
    std::istringstream ss(str);
    ss >> int_value;

    std::cout<<int_value<<std::endl;

    return 0;
}

संपादित करें : यह बहुत ही कम और सुरुचिपूर्ण है, क्योंकि मुझे पसंद है कि यह समाधान है! यह नकारात्मक संख्याओं के लिए काम नहीं करता है लेकिन मुझे केवल सकारात्मक लोगों को ही जरूरत है

#include <cstring>
#include <iostream>
#include <sstream>

int main()
{
    std::string str =  "2147483647";

    int int_value;
    std::istringstream ss(str);

    if (ss >> int_value)
        std::cout << "Hooray!" << std::endl;

    std::cout<<int_value<<std::endl;


    str =  "-2147483648";
    std::istringstream negative_ss(str);

    if (ss >> int_value)
        std::cout << "Hooray!" << std::endl;

    std::cout<<int_value<<std::endl;

    return 0;
}

आप Boost lexical_cast का उपयोग करने का प्रयास कर सकते हैं, अगर कलाकार विफल हो गया तो यह एक अपवाद फेंक देगा।

int number;
try
{
     number = boost::lexical_cast<int>(str);
}
catch(boost::bad_lexical_cast& e)
{
    std::cout << str << "isn't an integer number" << std::endl;
}

@ क्रिस के लिए Accorinding संपादित करें , आप सी ++ 11 के बाद भी std::stoi का उपयोग करने का प्रयास कर सकते हैं। यदि कोई रूपांतरण नहीं किया जा सकता है तो यह std::invalid_argument अपवाद फेंक देगा। आप यहां अधिक जानकारी पा सकते हैं: std :: stoi


/* isdigit example */
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main ()
{
  char str[]="1776ad";
  int year;
  if (isdigit(str[0]))
  {
    year = atoi (str);
    printf ("The year that followed %d was %d.\n",year,year+1);
  }
  return 0;
}







typechecking