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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top