تحويل السلسلة إلى int باستخدام معالجة الأخطاء في لغة C
يعد تحويل السلسلة إلى عدد صحيح مهمة شائعة في البرمجة. ومع ذلك، قد تكون هناك حالات حيث لا يمكن تحويل قيمة السلسلة بنجاح إلى عدد صحيح. في مثل هذه السيناريوهات، من الضروري التعامل مع فشل التحويل بأمان.
boost::lexical_cast
واحدة من أكثر الطرق المباشرة لتحويل سلسلة إلى int مع وجود خطأ المعالجة هي استخدام وظيفة Boost::lexical_cast. تطرح هذه الوظيفة استثناءً إذا تعذر متابعة التحويل، مما يسمح لنا بالتقاطه والاستجابة بشكل مناسب.
#include
int main() {
std::string s;
std::cin >> s;
try {
int i = boost::lexical_cast(s);
} catch (...) {
// Handle the conversion failure
}
}
استخدام وظائف المكتبة القياسية
هناك طريقة بديلة دون استخدام التعزيز وهي الاستفادة من وظائف المكتبة القياسية مثل std::stringstream وstd::bad_cast.
#include
#include
int main() {
std::string s;
std::cin >> s;
std::stringstream ss(s);
int i;
if ((ss >> i).fail() || !(ss >> std::ws).eof()) {
throw std::bad_cast();
}
}
وظيفة مخصصة
للتخصيص، يمكنك إنشاء وظيفة تحاكي وظيفة Boost::lexical_cast وتدير حالات فشل التحويل.
template
T lexical_cast(const std::string& s) {
std::stringstream ss(s);
T result;
if ((ss >> result).fail() || !(ss >> std::ws).eof()) {
throw std::bad_cast();
}
return result;
}
إصدارات غير قابلة للرمي
إذا كنت تفضل تجنب طرح الاستثناءات، فيمكنك إنشاء إصدارات غير قابلة للرمي للوظائف المذكورة أعلاه عن طريق التقاط الاستثناءات وإرجاع الفشل مؤشر.template
bool lexical_cast(const std::string& s, T& t) {
try {
t = lexical_cast(s);
return true;
} catch (const std::bad_cast& e) {
return false;
}
}
باستخدام هذه الطرق، يمكنك تحويل السلاسل إلى أعداد صحيحة بكفاءة أثناء التعامل مع حالات فشل التحويل المحتملة. تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3