'itoa' :funktion akzeptiert nicht 1 Argumente & 'c' :nicht deklarierte Kennung
Frage
Ich versuche jetzt seit 2 Tagen, diesen Code zum Laufen zu bringen.Es war nur ein Fehler nach dem anderen.
Kann jemand darauf hinweisen, was ich falsch mache?
#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);
}
Die Verwendung von std:: to_string gibt mir auch mehr Fehler.
Lösung
Wenn Ihr Compiler Ihnen in einer Fehlermeldung etwas erklärt, sollten Sie es glauben. itoa
nimmt in der Tat mehr als ein Argument an, wie Sie unter folgendem Link sehen können:
http://www.cplusplus.com/reference/clibrary/cstdlib/itoa/
Bearbeiten:Oh, und das ist übrigens mit Standardcode im C ++ - Stil erreichbar (ein bisschen Code gemäß Vorschlag in den Kommentaren behoben):
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;
}
Hier.Ich bin mir nicht sicher, ob es die sauberste Lösung ist, aber es funktioniert auf meinem Compiler.
Bearbeiten:Hier erfahren Sie, wie Sie nur einen Stringstream verwenden : Wie lösche ich Stringstream?
Andere Tipps
Kann ich eine andere Lösung vorschlagen?Anstatt int <-> String-Konvertierungen zu testen, können Sie prüfen, ob eine Zahl ein Palindrome auf diesem Weg ist:
generasacodicetagpre.Dann wird Ihr Test:
generasacodicetagpre.Für das erste Problem könnte eine korrekte Einrückung es deutlich machen:
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;
Mit einigen zusätzlichen Klammern:
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;
}
}
Wie für die itoa
ausgabe, seine Unterschrift ist:
char * itoa ( int value, char * str, int base );
du kannst also nicht einfach schreiben itoa(x)
und erwarte, dass es eine Zeichenfolge zurückgibt.
Es gibt jedoch bessere Möglichkeiten, eine zu konvertieren int
zu einem string
für C++
- wenn Sie C ++ 11 haben, gibt es
std::to_string
- andernfalls wird ein
std::stringstream
wird den Job machen.
Wie so:
#include <sstream>
int reverse (int x)
{
std::stringstream ss;
ss << x;
string s(ss.str());
reverse(s.begin(), s.end());
return (x);
}
Beachten Sie, dass dies das nicht zurückgibt int
umgekehrt.