• 0

كيفية تحويل رقم صحيح int إلى نص string في لغة ++C؟

لدي متغير يحمل رقم صحيح من نوع int يقوم المستخدم بإدخاله من خلال cin ، وأريد أن أقوم بدمجه مع نص (اسم المستخدم)، كالتالي:

int age = 18;
std::string name = "Mohammed";
std::string new_name = "Your name is " + name + " and your age is " + age;

ولكن تظهر لي هذه الأخطاء:

Error (active)	E0349	no operator "+" matches these operands

Error	C2676	binary '+': 'std::string' does not define this operator or a conversion to a type acceptable to the predefined operator

كيف يمكنني دمج رقم صحيح مع نص؟ في لغات أخرى مثل JavaScript لا أحتاج إلى أي خطوات للقيام بهذه المهمة، لكن كيف أقوم بها في ++C؟

تمّ تعديل بواسطة Mohssen A Mohssen
1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 1

يمكنك القيام بهذا الأمر بعدة طرق، كالتالي:

تحويل قيمة المتغير age إلى نص من خلال الدالة to_string:

int age = 18;
std::string name = "Mohammed";
std::string new_name = "Your name is " + name + " and your age is " + std::to_string(age);

std::cout << new_name;	// Your name is Mohammed and your age is 18

أو إن كنت تستعمل مكتبة boost فيمكنك أن تستعمل التابع int_to_string:

int age = 18;
std::string name = "Mohammed";
std::string new_name = "Your name is " + name + " and your age is " + boost::lexical_cast<std::string>(age);

std::cout << new_name;	// Your name is Mohammed and your age is 18

تستطيع أيضًا أن تستعمل stringstream، على النحو التالي:

// لإستخدام stringstream
#include <sstream>

int age = 18;
std::string name = "Mohammed";

std::stringstream ss;
ss << age;

std::string new_name = "Your name is " + name + " and your age is " + ss.str();
std::cout << new_name;	// Your name is Mohammed and your age is 18

 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

يمكن تحويل العدد الصحيح لتمثيله كشلشلة نصية من خلال تكرار قسمته على 10 وفي كل مرة أخذ باقي القسمة على 10 مع جمع قيمة المحرف '0' كخرج للمرحلة، فيكون الخرج سلسلة مجموعة محارف بين '0' و '9'.

باستخدام خوارزمية عودية:

  • تكرار الاستدعاء طالما n/10 ليس 0 (شرط التوقف)
  • استدعاء الدالة عودياً للخطوة التالية n/10
  • طباعة باقي قسمة n على 10 + '0' كنتيجة للخطوة الحالية
void convert_To_String(int n)
{
    if (n / 10 != 0) {
        convert_To_String(n / 10);
    }
    printf("%d", n % 10 + '0');
}

في الحل السابق، لانضطر لعكس جهة المحارف المشكلة للعدد لأن تعليمة الطباعة للخطوة الحالية سيتم تنفيذها لاحقاً بعد انتهاء الاستدعاءات العودية 

ويمكن الحل باستخدام حلقة:

  • r سلسلة الجواب وستكون من محارف بين 0 و 9
  • ثم حلقة طالما n لا تساوي 0 سنكرر الخطوات:
  • حساب قيمة باقي قسمة العدد n على 10
  • إضافة قيمة السلسلة النصية المؤقتة للإجابة
  • قسمة العدد n على 10
  • إعادة r
std::string to_Binary(int n)
{
  std::string r;
  while(n!=0) {
    std::string tmp = n % 10 + '0';
    r=+temp; 
    n/=10;
  }
  return r;
}
2 اشخاص أعجبوا بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن