C++ ';itoa';:函数不接受1个参数&';c';:未声明的标识符

C++ ';itoa';:函数不接受1个参数&';c';:未声明的标识符,c++,string,itoa,C++,String,Itoa,我已经试了两天来让这段代码正常工作。这只是一个接一个的错误 有人能指出我做错了什么吗 #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++)

我已经试了两天来让这段代码正常工作。这只是一个接一个的错误

有人能指出我做错了什么吗

#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);
}
#包括“stdafx.h”
#包括
#包括
使用名称空间std;
int main()
{
int h=0;

对于(int a=100;a对于第一个问题,正确的缩进可能会清楚地表明:

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(x)
并期望它返回字符串

然而,在C语言中有更好的方法将
int
转换为
string
++

  • 如果您有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);
}
#包括
反向整数(整数x)
{
std::stringstream-ss;

ss当编译器在错误消息中向您解释某些内容时,您应该相信它。
itoa
实际上接受了不止一个参数,您可以在以下链接中看到:

编辑:哦,顺便说一句,这可以通过使用标准的C++风格的代码来实现(根据评论中的建议修复了一些代码):

int反转(int x)
{
std::stringstream-ss;
ss>x;
返回x;
}
这里。不确定这是最干净的解决方案,但它可以在我的编译器上运行


编辑:了解如何在此处仅使用一个字符串流:

我可以建议其他解决方案吗?您可以通过以下方式测试数字是否为回文,而不是进行intstring转换:

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))

听听你的编译器。它告诉你问题出在哪里。
…不带1个参数…
,这告诉你两件事中的一件:1.你将一个参数发送给一个不带任何参数的函数(在这种情况下不太可能),或2。当函数至少需要两个参数时,您正在发送一个参数,但可以是
n(Arg)
。如果
n=100
并且您发送了
99
它会说“…函数不接受99个参数”。
。函数不接受99个参数…
。当您超过它时,情况也是一样的!当您发送正确数量的参数时,它将正确编译。进一步查看您的代码,然后继续对其他答案的评论感到沮丧,我建议你使用大括号,即使它们不是“需要的”!尤其是当你不断地出现简单错误时。当你在观看《宋飞记》时可以写出代码,然后省略它们。我会按要求使用它们!也许你应该问一下如何解决你遇到的问题,它比itoa和standard好14倍。仅供参考:在你有一个或多个程序员的情况下(你)接受
n(+/-)x
参数的已定义重载函数您不会得到该错误消息,但可能会得到意外结果。“错误:不存在从“std::stringstream”到“std::string”的合适的用户定义转换”还有一些错误:/@LuchianGrigore:我并不否认这一点,尽管在修复我自己的解决方案时,我不想复制你的解决方案。如果人们发现你的解决方案更好,他们可以将其升级(确实更短)。我只是测试了你的解决方案,但它似乎不起作用(没有反转)而这一个是。我想知道是否可以只使用一个stringstream。我没有幸清除()或flush()清空它,所以我不得不求助于使用一个用于输入,另一个用于输出。“'void std::reverse(_BidIt,_BidIt)':需要2个参数-1提供”,“'reverse':本地函数定义是非法的,”,“(7):此行包含一个尚未匹配的“{”,“在左大括号“{”之前找到文件结尾”我认为C++讨厌我。再次搜索编译器的错误引用并查看可能匹配的错误MSG。<代码>文件结束之前找到的左括号。< /代码>正好是这样。好,我怎么才能使它返回INT反转?@ LeNAD177不同的问题。你错过了STD::在字符串和BEOF之前。e相反,ss.str()函数调用缺少括号。@AlexandreP.Levasseur文件开头有一个
使用名称空间std;
,因此不需要限定。没有看到这一点(尽管您使用的是std::before stringstream:D).看起来不错,但是你能更详细地解释一下吗?我不太明白它是干什么的,只是它起作用了。@Leinad177:关键的想法是使用
temp%10
来分离
temp
的最小重要数字。循环的每一步它都将
rebmun
乘以10以将值“向左”移动然后将
temp
中的最后一个数字相加。直到
temp
变为零,数字从
temp
移动到
rebmun
一次一个。请注意,参数
base
对于十进制数字默认为10,但您可以通过2来测试二进制(基数2)回文。这将用于另一个项目问题:)
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;
}
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))