تحويل String إلى Int في C++: شرح عملي لأشهر طريقتين مع أمثلة

دقائق القراءة: 5

مقدمة: لماذا نحتاج إلى تحويل String إلى Int في C++؟

أثناء البرمجة باستخدام C++ ستواجه كثيراً مواقف تحتاج فيها إلى تحويل نوع بيانات إلى نوع آخر. ومن أكثر العمليات شيوعاً تحويل قيمة نصية من نوع string إلى عدد صحيح من نوع int، خاصة عند قراءة المدخلات من المستخدم أو التعامل مع البيانات القادمة من ملفات أو واجهات خارجية.

في هذا الدليل ستتعرف على طريقتين شائعتين وعمليتين لتنفيذ هذا التحويل في C++، مع توضيح الفكرة خطوة بخطوة وأمثلة برمجية واضحة.

شرح تقني لتحويل string إلى int في لغة C++ مع أمثلة برمجية عملية

أنواع البيانات الأساسية في C++

توفّر لغة C++ مجموعة من أنواع البيانات المدمجة التي تُستخدم لتخزين قيم مختلفة، ومن أشهرها:

  • int لتخزين الأعداد الصحيحة مثل 10 و150.
  • double لتخزين الأعداد العشرية مثل 5.0 و4.5.
  • char لتخزين محرف واحد مثل 'D' أو '!'.
  • string لتخزين سلسلة من المحارف مثل "Hello".
  • bool لتخزين القيم المنطقية مثل true أو false.

وتُعد C++ لغة strongly typed، وهذا يعني أنك تحتاج إلى تحديد نوع البيانات بشكل صريح عند إنشاء أي متغير. لذلك لا يمكن التعامل مع النصوص والأرقام على أنها الشيء نفسه بدون تحويل مناسب.

كيفية التصريح عن متغير من النوع Int في C++

لإنشاء متغير من النوع int، تكتب أولاً نوع البيانات ثم اسم المتغير، وبعد ذلك تنهي التعليمة بالفاصلة المنقوطة.

#include <iostream>

int main() {
    int age;
}

بعد التصريح عن المتغير، يمكنك إسناد قيمة له لاحقاً:

#include <iostream>

int main() {
    int age;
    age = 28;
}

كما يمكنك تنفيذ التصريح والتهيئة في خطوة واحدة، ثم طباعة الناتج:

// a header file that enables the use of functions for outputing information
// e.g. cout or inputing information e.g. cin
#include <iostream>

// a namespace statement; you won't have to use the std:: prefix
using namespace std;

int main() {
    // start of main function of the program
    int age = 28;

    // output to the console: "My age is 28"
    cout << "My age is: " << age << endl;
}
// end the main function

كيفية التصريح عن String وتهيئته في C++

الـ string هو سلسلة من المحارف. وطريقة التصريح عنه تشبه إلى حد كبير التصريح عن int، لكنك تحتاج إلى تضمين المكتبة <string> حتى تتمكن من استخدامه.

#include <iostream>
#include <string>
using namespace std;

int main() {
    // declare a string variable
    string greeting;
    greeting = "Hello";
}

ويمكنك أيضاً تهيئة المتغير النصي مباشرة ثم طباعته:

#include <iostream>
#include <string>
using namespace std;

int main() {
    // initialize a string variable
    string greeting = "Hello";

    // output "Hello" to the console
    cout << greeting << endl;
}

لماذا لا ينجح التحويل المباشر من String إلى Int؟

بما أن C++ لغة صارمة في أنواع البيانات، فإن محاولة تحويل string إلى int باستخدام type casting التقليدي لن تنجح كما يحدث مثلاً عند تحويل double إلى int.

على سبيل المثال، الكود التالي غير صحيح:

#include <iostream>
#include <string>
using namespace std;

int main() {
    string str = "7";
    int num;
    num = (int) str;
}

والسبب أن string كائن نصي، وليس قيمة رقمية خام يمكن تحويلها مباشرة بهذا الأسلوب. لذلك تحتاج إلى استخدام دوال أو أدوات مخصصة لفهم النص واستخراج القيمة العددية منه.

من الأخطاء الشائعة الناتجة عن هذا الأسلوب:

hellp.cpp:9:10: error: no matching conversion for C-style cast from 'std::__1::string' to 'int'
num = (int) str;

أفضل طرق تحويل String إلى Int في C++

توجد عدة وسائل لإجراء هذا التحويل، لكن من أكثرها شيوعاً واعتماداً:

  • استخدام الدالة stoi().
  • استخدام الفئة stringstream.

فيما يلي شرح كل طريقة ومتى يفضل استخدامها.

الطريقة الأولى: تحويل String إلى Int باستخدام stoi()

تُعد الدالة stoi() من أسهل وأوضح الطرق لتحويل النص إلى عدد صحيح. وقد أصبحت متاحة بدءاً من C++11، لذلك فهي مناسبة للمشاريع الحديثة.

فكرة هذه الدالة بسيطة: تستقبل قيمة من النوع string وتُرجع المقابل العددي لها من النوع int.

#include <iostream>
#include <string>
using namespace std;

int main() {
    // a string variable named str
    string str = "7";

    // print to the console
    cout << "I am a string " << str << endl;

    // convert the string to int
    int num = stoi(str);

    // print to the console
    cout << "I am an int " << num << endl;
}

الناتج:

I am a string 7
I am an int 7

مزايا استخدام stoi()

  • سهلة القراءة والفهم.
  • مناسبة لمعظم تطبيقات C++ الحديثة.
  • تختصر عليك خطوات كثيرة مقارنة ببعض الأساليب الأقدم.

متى تستخدم stoi()؟

إذا كنت تعمل على مشروع يدعم C++11 أو إصداراً أحدث، فغالباً ستكون stoi() هي الخيار الأول بسبب بساطتها ووضوحها.

الطريقة الثانية: تحويل String إلى Int باستخدام stringstream

قبل شيوع stoi()، كان كثير من المطورين يستخدمون stringstream لتحويل النصوص إلى أرقام. وما زالت هذه الطريقة مفيدة، خاصة عند التعامل مع شيفرات أقدم أو عند الحاجة إلى معالجة نصية مرنة.

لاستخدام هذه الفئة، تحتاج أولاً إلى تضمين المكتبة <sstream> في أعلى البرنامج.

#include <iostream>
#include <string>
#include <sstream>
using namespace std;

int main() {
    // create a stringstream object
    stringstream ss;

    // a variable named str, that is of string data type
    string str = "7";

    // a variable named num, that is of int data type
    int num;

    // extract the string from the str variable
    ss << str;

    // place the converted value to the int variable
    ss >> num;

    // print to the console
    cout << num << endl;
}

الناتج سيكون:

7

كيف تعمل stringstream؟

تعتمد stringstream على إنشاء تدفق نصي يمكن إدخال النص إليه ثم استخراج القيمة المطلوبة منه بصيغة رقمية. وهي آلية مفيدة عندما تحتاج إلى تحويلات متعددة أو تحليل نصوص أكثر تعقيداً.

متى تكون stringstream خياراً مناسباً؟

  • عند التعامل مع مشاريع قديمة في C++.
  • عندما تحتاج إلى تحليل نصوص واستخراج أكثر من قيمة من السلسلة نفسها.
  • إذا كنت تفضّل أسلوب التدفقات streams في المعالجة.

مقارنة سريعة بين stoi() و stringstream

الطريقة سهولة الاستخدام التوافق الاستخدام الأنسب
stoi() عالية جداً تتطلب C++11 أو أحدث المشاريع الحديثة والتحويل المباشر
stringstream متوسطة مناسبة لأساليب أقدم أيضاً تحليل النصوص أو الشيفرات القديمة

نصائح مهمة عند تحويل String إلى Int

  1. تأكد أن السلسلة النصية تحتوي فعلاً على أرقام قابلة للتحويل.
  2. استخدم stoi() عندما تريد حلاً سريعاً وواضحاً في البيئات الحديثة.
  3. استخدم stringstream إذا كنت تعمل على معالجة نصية أوسع من مجرد تحويل بسيط.
  4. تجنّب الاعتماد على C-style cast مع string لأنه لن يحقق النتيجة المطلوبة.

الخلاصة التقنية

تحويل string إلى int في C++ ليس عملية تحويل مباشرة باستخدام casting التقليدي، بل يتطلب أداة مخصّصة مثل stoi() أو stringstream. من الناحية العملية، تُعد stoi() الخيار الأفضل في أغلب المشاريع الحديثة لأنها أبسط وأكثر وضوحاً، بينما تبقى stringstream مفيدة في السيناريوهات التي تتضمن تحليل النصوص أو دعم الشيفرات القديمة. اختيار الطريقة المناسبة يعتمد على إصدار C++ المستخدم وطبيعة المشروع نفسه.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *