سؤال

لديّ وظيفة بسيطة في برنامجي ، عندما كنت أرغب في العبث مع Unicode والقيام بأشياء معها. في هذه الوظيفة ، أردت عرض قيمة رمز الحرف الذي أدخله المستخدم. يبدو ذلك ممكنًا ، ها هي وظيفتي:

wstring listcode(wchar_t arg) {
    wstring str = L"";
    str += static_cast<int> (arg); //I tried (int) arg as well
    str += L": ";
    str += (wchar_t) arg;
    return str;
}

الآن كما ترى ، أردت فقط عرض قيمة عدد صحيح (مثل حرف ASCII ، مثل (int) "a") ولكن شيء مثل listcode(L"&") سيتم عرضه على أنه &: & !

أليس من الممكن العثور على قيمة عدد صحيح لشخصية واسعة من هذا القبيل؟

هل كانت مفيدة؟

المحلول

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

std::wstring listcode(wchar_t arg)
{
  std::wostringstream oss;
  oss << static_cast<int>(arg);
  oss << L": ";
  oss << arg;
  return oss.str();
}

في الممارسة العملية ، ومع ذلك ، عند التحويل إلى سلاسل في C ++ ، من الأفضل أن يكون لديك وظائف الكتابة إلى دفق ، من إعادة سلسلة:

void listcode(std::wostream os, wchar_t arg)
{
  os << static_cast<int>(arg);
  os << L": ";
  os << arg;
}

وبهذه الطريقة ، إذا كنت ترغب في إخراج شيء ما إلى وحدة التحكم أو إلى ملف ، يمكنك المرور مباشرة std::cout أو دفق ملف ، وإذا كنت تريد سلسلة ، فأنت فقط تمرير دفق سلسلة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top