मैं चीजों को थोड़ा अलग तरीके से करते हैं - इनपुट के साथ एक stringstream प्रारंभ, एक पूर्णांक पढ़ा तो जाँच करें कि क्या धारा खाली है:
#include <sstream>
#include <iostream>
typedef char const *LPCSTR;
template <class T>
bool check_read(LPCSTR input, T &val) {
std::istringstream reader(input);
reader >> val;
char ch;
if (reader >> ch) {
std::cerr << "\nUnconverted character: " << ch << std::endl;
return false;
}
return true;
}
int main() {
LPCSTR inputs[] = {"12345", "54321a"};
int a;
for (int i=0; i<2; i++) {
check_read(inputs[i], a);
std::cout << "Converted: " << a << std::endl;
}
return 0;
}
एक और उचित संभावना strtol होगा या में से एक अपने चचेरे भाई बहिन। ये पहले अन-रूपांतरित चरित्र (यदि कोई हो) में एक सूचक लौटाते हैं, इसलिए वे आपको सीधे बताते हैं कि क्या किया गया था और परिवर्तित नहीं किया गया था। वे तेजी से होते हैं लेकिन आमतौर पर धाराओं से कम लचीला होते हैं - उदाहरण के लिए, यदि आप एक फ़्लोटिंग पॉइंट नंबर पढ़ना चाहते हैं, तो उपरोक्त चेक_read काम करेगा, लेकिन स्ट्रेटोल का उपयोग करने वाले कुछ को फिर से लिखना होगा।
अभी तक एक और संभावना के रूप में, आप Boost lexical_cast पर विचार कर सकते हैं (जिसे थोड़ा अलग पैक किया गया है, लेकिन ऊपर दिए गए कोड के समान ही है)।
स्रोत
2009-10-13 18:47:42
दोह! क्षमा करें दोस्तों, मस्तिष्क फार्ट। इस बात को याद रखने के लिए किसी प्रकार का मानसिक ब्लॉक होना चाहिए और इसे मेरी किसी भी खोज पर कभी नहीं देख सकता –
lstrlen() यह है ... –