न्यूमेरिक स्ट्रिंग वैलिडेशन
यहां हम देखेंगे कि कैसे जांचें कि दिया गया इनपुट न्यूमेरिक स्ट्रिंग है या सामान्य स्ट्रिंग। न्यूमेरिक स्ट्रिंग केवल 0-9 रेंज के कैरेक्टर्स रखेगी। समाधान बहुत सरल है: हम बस प्रत्येक कैरेक्टर को एक-एक करके देखेंगे और जांचेंगे कि यह न्यूमेरिक है या नहीं। यदि यह न्यूमेरिक है, तो अगले पर जाएं, अन्यथा false रिटर्न करें।
उदाहरण: isNumeric फ़ंक्शन
#include <iostream>
#include <string>
#include <cctype> // isdigit के लिए
using namespace std;
bool isNumeric(const string& str) {
if (str.empty()) return false;
for (char c : str) {
if (!isdigit(static_cast<unsigned char>(c)))
return false; // गैर-न्यूमेरिक मिलने पर false रिटर्न करें
}
return true;
}
int main() {
string str;
cout << "Enter a string: ";
cin >> str;
if (isNumeric(str))
cout << "This is a Number" << endl;
else
cout << "This is not a number" << endl;
return 0;
}
आउटपुट
Enter a string: 5687 This is a Number
Enter a string: 584asS This is not a number
उन्नत वैलिडेशन
ऋणात्मक संख्याओं को संभालना
bool isInteger(const string& str) {
if (str.empty()) return false;
size_t start = 0;
if (str[0] == '-' || str[0] == '+') {
if (str.size() == 1) return false; // केवल साइन
start = 1;
}
for (size_t i = start; i < str.size(); ++i) {
if (!isdigit(static_cast<unsigned char>(str[i])))
return false;
}
return true;
}
फ्लोटिंग-पॉइंट संख्याओं को संभालना
bool isFloat(const string& str) {
if (str.empty()) return false;
size_t start = 0;
if (str[0] == '-' || str[0] == '+') start = 1;
if (start == str.size()) return false;
bool decimal_seen = false;
bool digit_seen = false;
for (size_t i = start; i < str.size(); ++i) {
char c = str[i];
if (isdigit(static_cast<unsigned char>(c))) {
digit_seen = true;
} else if (c == '.' && !decimal_seen) {
decimal_seen = true;
} else {
return false;
}
}
return digit_seen;
}
मॉडर्न C++ दृष्टिकोण (C++11/17)
std::all_of के साथ
#include <algorithm>
#include <cctype>
bool isNumeric(const string& str) {
return !str.empty() && all_of(str.begin(), str.end(),
[](char c) { return isdigit(static_cast<unsigned char>(c)); });
}
std::from_chars का उपयोग करना (C++17) - सबसे मजबूत
#include <charconv>
#include <string_view>
bool isInteger(const string_view str) {
int value;
auto result = from_chars(str.data(), str.data() + str.size(), value);
return result.ec == errc() && result.ptr == str.data() + str.size();
}
bool isDouble(const string_view str) {
double value;
auto result = from_chars(str.data(), str.data() + str.size(), value);
return result.ec == errc() && result.ptr == str.data() + str.size();
}
सारांश
| विधि | पक्ष | विपक्ष |
|---|---|---|
| मैनुअल लूप | सरल, कोई डिपेंडेंसी नहीं | केवल अनसाइन्ड इंटीजर्स |
| std::all_of | क्लीन, फंक्शनल स्टाइल | केवल बेसिक चेक |
| std::from_chars | फास्ट, कोई एक्सेप्शन नहीं, सटीक | C++17 आवश्यक, कोई लोकल सपोर्ट नहीं |
| stringstream | फ्लोट्स/हैक्स संभालता है | धीमा, ढीला पार्सिंग |
| stoi/stod | सरल API | एक्सेप्शन फेंकता है, आंशिक पार्सिंग अनुमति देता है |