[c++] जांचें कि इनपुट C ++ में कोई संख्या या स्ट्रिंग है या नहीं



Answers

आप इसे करने के लिए regex का उपयोग कर सकते हैं:

#include <regex>

bool isNumber(std::string x){
    std::regex e ("^-?\\d+");
    if (std::regex_match (x,e)) return true;
    else return false;}

यदि आप isNumber() एक सामान्य समारोह बनाना चाहते हैं जो किसी भी प्रकार के इनपुट को ले सकता है:

#include <regex>
#include <sstream>

template<typename T>
bool isNumber(T x){
    std::string s;
    std::regex e ("^-?\\d+");
    std::stringstream ss; 
    ss << x;
    ss >>s;
    if (std::regex_match (s,e)) return true;
    else return false;}

उपर्युक्त isNumber() पूर्णांक के लिए फ़ंक्शन चेक, सटीक के साथ डबल या फ्लोट वैल्यू (जिसमें डॉट शामिल है . ) सच नहीं लौटाएंगे। यदि आप सटीक भी चाहते हैं, तो regex लाइन को निम्न में बदलें:

std::regex e ("^-?\\d*\\.?\\d+");

यदि आप एक और अधिक कुशल समाधान चाहते हैं, तो इसे देखें

Question

मैंने निम्नलिखित कोड लिखा है कि इनपुट (उत्तर 3) एक संख्या या स्ट्रिंग है या नहीं, अगर यह एक संख्या नहीं है, तो उसे "केवल संख्याएं दर्ज करें" लौटना चाहिए, लेकिन यह नंबरों के लिए भी यही देता है कृपया मुझे एक समाधान सुझाएं

#include <iostream>
#include <string>
#include <typeinfo>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

using namespace std; 
int main ()
{

string ques1= "Client's Name :";
string ques2 = "Client's Address :";
string ques3 = "Mobile Number :";

char answer1 [80];
string answer2;
int answer3;

     cout<<ques1<<endl;    
     cin>>answer1;      

     cout<<ques2<<endl;    
     cin>>answer2; 

     cout<<ques3<<endl;
     cin>>answer3;

       if (isdigit(answer3))
       {
              cout<<"Correct"<<endl;     

              }

        else
        {
          cout<<"Enter Numbers Only"<<endl;  

            }

 system("pause>null");
 return 0;  

}



ब्याज की घटनाओं को isdigit char को unsigned char डाले जाने की आवश्यकता है। ( यहां भी देखें)।




isdigit लिए इनपुट एक पूर्णांक मान है हालांकि, अगर यह मान '0' - '9' से मेल खाती है, तो यह सत्य (गैर-शून्य) लौटाएगा। यदि आप उन्हें पूर्णांक मानों में परिवर्तित करते हैं, तो वे 48-57 हैं। अन्य सभी मूल्यों के लिए, isdigit गलत (शून्य) isdigit

आप जाँच कर सकते हैं कि आपको जाँच तर्क को बदलकर एक पूर्णांक मिला है या नहीं:

if ( cin.fail() )
{
   cout<<"Correct"<<endl;     
}
else
{
   cout<<"Enter Numbers Only"<<endl;  
}





Links