'이토아':함수는 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는 실제로 다음 링크에서 볼 수 있듯이 둘 이상의 인수를 가져옵니다.

"Rel="nofollow noreferrer"> 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;
}
.

여기.가장 깨끗한 솔루션이지만 컴파일러에서 작동합니다.

편집 : 여기에 하나의 stringstream 만 사용하는 방법을 알아 냈습니다. StringStream을 지우는 방법

다른 팁

다른 해결책을 제안 할 수 있습니까?int <-> 문자열 변환을 수행하는 대신 숫자가 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