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