"إيتوا":لا تأخذ الوظيفة وسيطة واحدة و"c":معرف غير مصرح به
سؤال
لقد كنت أحاول منذ يومين تشغيل هذا الرمز.لقد كان مجرد خطأ بعد خطأ.
هل يمكن لأي شخص أن يشير إلى ما أفعله خطأ؟
#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;
int main()
{
int h = 0;
for(int a = 100; a<1000; a++)
for(int b = 100; b<1000; b++)
int c = a * b;
// Error: "c" is undefined
if ((c == reverse(c)) && (c > h))
h = c;
cout << "The answer is: " << h << endl;
}
int reverse (int x)
{
// Error: "'itoa' : function does not take 1 arguments"
string s = string(itoa(x));
reverse(s.begin(), s.end());
return (x);
}
استخدام std::to_string يعطيني المزيد من الأخطاء أيضًا.
المحلول
عندما يشرح لك المترجم شيئًا ما في رسالة خطأ، يجب أن تصدقه. itoa
وهي في الواقع تأخذ أكثر من وسيطة، كما ترى في الرابط التالي:
http://www.cplusplus.com/reference/clibrary/cstdlib/itoa/
يحرر:أوه، وهذا يمكن تحقيقه باستخدام التعليمات البرمجية القياسية على نمط C++ بالمناسبة (تم إصلاح جزء من التعليمات البرمجية وفقًا للاقتراح في التعليقات):
int reverse(int x)
{
std::stringstream ss;
ss << x;
std::string s = ss.str();
std::reverse(s.begin(), s.end());
ss.clear();
ss.str(s.c_str());
ss >> x;
return x;
}
هنا.لست متأكدًا من أنه الحل الأنظف ولكنه يعمل على برنامج التحويل البرمجي الخاص بي.
يحرر:تعرف على كيفية استخدام سلسلة واحدة فقط هنا: كيفية مسح stringstream؟
نصائح أخرى
هل يمكنني اقتراح حل مختلف؟بدلا من القيام تحويلات السلسلة Int <->، يمكنك اختبار لمعرفة ما إذا كان الرقم هو palindrome بهذه الطريقة:
giveacodicetagpre.ثم يصبح الاختبار الخاص بك:
giveacodicetagpre.بالنسبة للمشكلة الأولى، قد توضح المسافة البادئة الصحيحة ما يلي:
int h = 0;
for(int a = 100; a<1000; a++)
for(int b = 100; b<1000; b++)
int c = a * b;
if ((c == reverse(c)) && (c > h))
h = c;
مع بعض الأقواس الإضافية:
int h = 0;
for(int a = 100; a<1000; a++)
{
for(int b = 100; b<1000; b++)
{
int c = a * b;
if ((c == reverse(c)) && (c > h))
h = c;
}
}
أما بالنسبة لل itoa
القضية، توقيعها هو:
char * itoa ( int value, char * str, int base );
لذلك لا يمكنك الكتابة فقط itoa(x)
ونتوقع أن يعود سلسلة.
ولكن هناك طريقة أفضل لتحويل ملف int
إلى أ string
في سي ++
- إذا كان لديك C++ 11، هناك
std::to_string
- خلاف ذلك، أ
std::stringstream
سوف يقوم بهذه المهمة.
مثل ذلك:
#include <sstream>
int reverse (int x)
{
std::stringstream ss;
ss << x;
string s(ss.str());
reverse(s.begin(), s.end());
return (x);
}
لاحظ أن هذا لن يعيد ملف int
عكس بالرغم من ذلك.