سؤال

أحاول إعادة سلسلة من وظيفة. الذي يضيف بشكل أساسي بعض chars معًا وإرجاع تمثيل السلسلة.

string toString() {
   char c1, c2, c3;
   // some code here
   return c1 + c2; // Error: invalid conversion from `char' to `const char*'
}

من الممكن إرجاع القيم المنطقية مثل الإرجاع C1 == 'x'. أليس من الممكن إرجاع قيم السلسلة؟ أعلم أنه من الممكن أن يكون الأمر كذلك:

string result;
result.append(c1, c2);
return result;

أنا جديد على C ++ لذلك اعتقدت أنه يجب أن يكون هناك حل أكثر أناقة.

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

المحلول

لا ، لا يمكنك فعل ذلك لأن إضافة اثنين من char معا لا يمنحك سلسلة. يمنحك شار آخر. في هذه الحالة 'a'+'b' في الواقع يعطيك '├' (على Windows مع المعيار CP_ACP صفحة الكود). char هو نوع ترتيبي ، مثل الأعداد الصحيحة والمترجم يعرف فقط كيفية إضافتها بأكثر الطرق الأساسية. السلاسل هي وحش مختلف تماما.

يمكنك القيام بذلك ، ولكن عليك أن تكون صريحًا:

return string(1, c1) + string(1, c2)

سيؤدي ذلك إلى بناء سلسلتين مؤقتتين ، تم تهيئة كل منهما إلى تكرار واحد للشخصية التي تم تمريرها كمعلمة ثانية. حيث operator+ يتم تعريفه على الأوتار لتكون وظيفة تسلسل ، يمكنك الآن القيام بما تريد.

نصائح أخرى

char الأنواع في C ++ (وكذلك في C) هي أنواع متكاملة. أنها تتصرف كنوع لا يتجزأ. تماما مثل عندما تكتب 5 + 3 في الكود الخاص بك ، تتوقع أن تصبح جزءًا لا يتجزأ 8 نتيجة (وليس سلسلة "53")، عندما تكتب c1 + c2 في الكود الخاص بك أعلاه ، يجب أن تتوقع الحصول على نتيجة متكاملة - مجموع الحساب لـ c1 و c2.

إذا كنت تريد بالفعل سلسل حرفين لتشكيل سلسلة ، عليك القيام بذلك بشكل مختلف. هناك العديد من الطرق للقيام بذلك. على سبيل المثال ، يمكنك تشكيل سلسلة على غرار C.

char str[] = { c1, c2, `\0` };

التي سيتم تحويلها ضمنيًا إلى std::string بواسطة

return str;

أو يمكنك بناء ملف std::string على الفور (والتي يمكن القيام بها أيضًا بعدة طرق مختلفة).

يمكنك تحويل كل char إلى سلسلة ثم استخدام +:

return string(1, c1)+string(1, c2);

بالتناوب ، يحتوي String على تحميل + مشغل للعمل مع الأحرف ، حتى تتمكن من الكتابة:

return string(1, c1) + c2;

بغض النظر عن الطريقة التي تختارها ، ستحتاج إلى تحويل النوع المتكامل char إما إلى سلسلة على غرار C (char*) أو سلسلة نمط C ++ (std::string).

return string(1, c1) + c2;

هذا يبني سلسلة واحدة من الشحن ، تحتوي على C1 ، ثم يضيف (محملة إلى Concatenate) C2 (إنشاء سلسلة أخرى) ، ثم إرجاعها.

لا ، إنها تضيف فقط رموز الأحرف. تحتاج إلى تحويلها إلى سلاسل.

تحتاج إلى إنشاء سلسلة من chars.
ثم أعد السلسلة (في الواقع نسخة من السلسلة)

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