اذهب إلى المحتوى

السؤال

نشر (معدل)

لدي متغير يحمل رقم صحيح من نوع 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

Recommended Posts

  • 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

 

  • 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;
}

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...