"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكنني التعامل مع أخطاء التحويل عند تحويل سلسلة إلى عدد صحيح في C++؟

كيف يمكنني التعامل مع أخطاء التحويل عند تحويل سلسلة إلى عدد صحيح في C++؟

تم النشر بتاريخ 2024-11-15
تصفح:369

How can I handle conversion errors when converting a string to an integer in C  ?

تحويل السلسلة إلى 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