'ITOA': la funzione non richiede 1 argomenti e 'c': identificatore non dichiarato
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.
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ò.