'いとあ' :関数は 1 つの引数を取らない & 'c' :宣言されていない識別子

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

  •  13-12-2019
  •  | 
  •  

質問

このコードを機能させるために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) そして文字列を返すことを期待します。

ただし、変換するより良い方法があります intstring 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 逆になったけど。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top