'いとあ' :関数は 1 つの引数を取らない & 'c' :宣言されていない識別子
質問
このコードを機能させるために2日間試してきました。エラーが次から次へと出てきました。
誰かが私が間違っていることを指摘できますか?
#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;
}
.
ここに。それが最もきれいなソリューションであるかわからないが、私のコンパイラで動作します。
編集:ここで1つのStringStreamのみを使用する方法を見つけました。クリア方法StringStream?
他のヒント
私は別の解決策を提案することができますか?int < - > string変換を行う代わりに、このように番号がPalindromeであるかどうかを確認できます。
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;
}
.
それからあなたのテストは次のようになります:
if (is_palindrome(c) && (c > h))
. 最初の問題については、インデントを正しく設定すると、次のように明確になる場合があります。
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++で
- 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
逆になったけど。