البرمجة

قراءة الأعداد من STDIN بدون فواصل في C++

لقراءة الأعداد الصحيحة من مدخل الإدخال القياسي (stdin) في لغة C++ دون تحمل الفواصل مثل الفواصل والمسافات حتى النهاية (end-of-line)، يمكنك استخدام الدالة getline() لقراءة السلسلة كاملة ثم استخدام دالة stoi() لتحويل السلسلة إلى عدد صحيح.

اليك كود بسيط يوضح كيفية القراءة:

cpp
#include #include #include using namespace std; int main() { string input; getline(cin, input); // قراءة السلسلة كاملة من المدخل vector<int> numbers; // قائمة لتخزين الأعداد الصحيحة stringstream ss(input); // تحويل السلسلة إلى stringstream string token; while (getline(ss, token, ',')) { // قراءة الأعداد المفصولة بالفواصل stringstream tokenStream(token); int n; while (tokenStream >> n) { // تحويل السلسلة إلى عدد صحيح numbers.push_back(n); // إضافة العدد الصحيح إلى القائمة } } // طباعة الأعداد الصحيحة for (int num : numbers) { cout << num << " "; } cout << endl; return 0; }

هذا الكود يقوم بقراءة السلسلة بالكامل، ثم يستخدم دالة getline() لفصل الأعداد المفصولة بالفواصل. ثم يستخدم دالة stoi() لتحويل السلسلة إلى عدد صحيح ويتم إضافتها إلى قائمة من الأعداد الصحيحة.

المزيد من المعلومات

بالطبع! يمكنك تحسين هذا الكود بإضافة بعض المعالجة الإضافية للتعامل مع الأخطاء أو لزيادة الكفاءة. على سبيل المثال، يمكنك إضافة التحقق من صحة الأعداد المدخلة والتحقق من عدم وجود فواصل زائدة بعد آخر عدد. إليك نسخة معدلة من الكود تقوم بذلك:

cpp
#include #include #include #include using namespace std; int main() { string input; getline(cin, input); // قراءة السلسلة كاملة من المدخل vector<int> numbers; // قائمة لتخزين الأعداد الصحيحة stringstream ss(input); // تحويل السلسلة إلى stringstream string token; while (getline(ss, token, ',')) { // قراءة الأعداد المفصولة بالفواصل stringstream tokenStream(token); int n; while (tokenStream >> n) { // تحويل السلسلة إلى عدد صحيح numbers.push_back(n); // إضافة العدد الصحيح إلى القائمة if (tokenStream.peek() == ',') { tokenStream.ignore(); } } } // التحقق من عدم وجود فواصل زائدة بعد آخر عدد if (ss.peek() != EOF && ss.peek() != '\n') { throw runtime_error("Invalid input format."); } // طباعة الأعداد الصحيحة for (int num : numbers) { cout << num << " "; } cout << endl; return 0; }

هذا الكود يضيف جزءًا للتحقق من عدم وجود فواصل زائدة بعد آخر عدد، وإذا تم العثور على فاصلة زائدة، فإنه يثير استثناء (exception) من نوع runtime_error للتنبيه عن وجود تنسيق مدخل غير صالح.

زر الذهاب إلى الأعلى