'ITOA': la funzione non richiede 1 argomenti e 'c': identificatore non dichiarato

StackOverflow https://stackoverflow.com//questions/11706692

  •  13-12-2019
  •  | 
  •  

Domanda

Ho provato per 2 giorni ora per far funzionare questo codice.È stato solo errore dopo errore.

Qualcuno può indicare quello che sto sbagliando?

#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);
}
.

Usando STD :: To_String mi dà solo più errori.

È stato utile?

Soluzione

Quando il compilatore spiega qualcosa in un messaggio di errore, dovresti crederci.itoa fa, infatti, prendi più di un argomento, come puoi vedere al seguente link:

http://www.cplusplus.com/reference/clibriary/cstdlib/ITOA /

Modifica: Oh e questo è realizzabile utilizzando il codice di stile standard, C ++ a proposito (fisso un po 'di codice come per suggerimento nei commenti):

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;
}
.

qui.Non sono sicuro che sia la soluzione più pulita ma funziona sul mio compilatore.

Modifica: ha scoperto come utilizzare solo un stringstream qui: Come cancellare Stringstream?

Altri suggerimenti

Posso suggerire una soluzione diversa?Invece di fare conversioni INT <-> String String puoi testare per vedere se un numero è un palindromo in questo modo:

bool is_palindrome(int number, int base = 10)
{
    int rebmun = 0;
    for (int temp = number; temp != 0; temp /= base) {
        rebmun = (rebmun * base) + (temp % base);
    }
    return number == rebmun;
}
.

Quindi il tuo test diventa:

if (is_palindrome(c) && (c > h))
.

Per il primo problema, la corretta indentazione potrebbe renderla chiara:

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;
.

Con alcune staffe aggiuntive:

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;
    }
}
.

Per quanto riguarda il problema itoa, la sua firma è:

char *  itoa ( int value, char * str, int base );
.

Quindi non puoi semplicemente scrivere itoa(x) e aspettarsi che restituisca una stringa.

Ci sono comunque un modo migliore per convertire un int in un string in C ++

    .
  • Se hai C ++ 11, c'è std::to_string
  • Altrimenti, un std::stringstream farà il lavoro.

Come così:

#include <sstream>

int reverse (int x)
{
    std::stringstream ss;
    ss << x;
    string s(ss.str());
    reverse(s.begin(), s.end());
    return (x);
}
.

Nota che questo non restituirà il int invertito però.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top