C++ 如何在函数中调用函数?
我试图确定我的代码是否是回文,所以我创建了一个反向函数,然后创建了一个回文函数。我试图将反向字符数组分配到新函数中,但似乎无法将其编译。。。。有什么建议吗? 这是我的回文函数C++ 如何在函数中调用函数?,c++,function,compiler-construction,reverse,palindrome,C++,Function,Compiler Construction,Reverse,Palindrome,我试图确定我的代码是否是回文,所以我创建了一个反向函数,然后创建了一个回文函数。我试图将反向字符数组分配到新函数中,但似乎无法将其编译。。。。有什么建议吗? 这是我的回文函数 bool Palindrome(char Characters[], unsigned long length) { char tempstring[62]; tempstring[62] == reverse(Characters); for(int i=0; i <= length; i++)
bool Palindrome(char Characters[], unsigned long length)
{
char tempstring[62];
tempstring[62] == reverse(Characters);
for(int i=0; i <= length; i++){
if(Characters[i] == tempstring[i])
return false;
else
return true;
}
}
void reverse(char Characters[], unsigned long length)
{
char temp;
for(int i=0; i<length/2; i++){
temp = Characters[i];
Characters[i]=Characters[length-i-1];
Characters[length-i-1]=temp;
}
}
bool回文(字符[],无符号长)
{
char tempstring[62];
tempstring[62]==反向(字符);
对于(inti=0;i首先,你有一个输入错误;=
是一个比较等式,=
。你应该写
tempstring[62]=反向(字符);
但这仍然不起作用。对于初学者来说,reverse
是一个void
函数,因此它不会返回值
最快的修复方法是将该行替换为
reverse(Characters, length);
(注意,我还根据需要传递length
参数)
最后一件事:如果您组织了文件,使reverse
出现在回文
之后,那么您需要使用以下语句向前声明reverse
:
void reverse(char Characters[], unsigned long length);
这修复了编译错误。我请您检查运行时行为。您的错误是行tempstring[62]==reverse(Characters);
。您不需要双引号。将来,发布编译时收到的错误消息会有所帮助
bool Palindrome(char Characters[], unsigned long length)
{
char tempstring[62];
tempstring[62] = reverse(Characters);
for(int i=0; i <= length; i++){
if(Characters[i] == tempstring[i])
return false;
else
return true;
}
}
bool回文(字符[],无符号长)
{
char tempstring[62];
tempstring[62]=反向(字符);
对于(inti=0;i来说,您使这变得非常复杂
只需找到字符串的结尾(strlen
)。一次从两端读取一个字符,如果它们不匹配,则不是回文。如果索引变得相同或交叉,则完成。这确实是回文
即
编辑2
或
然后复制字符串,将其反转并进行比较。您的错误如下:
tempstring[62] == reverse(Characters);
您编写的=
表示返回true或false的条件(例如:如果(5==7)
->false)
但实际上您想要做的是tempstring[62]=反向(字符);
一个=
表示相等(int a=3
)
两个=
意味着检查一个条件(例如if(a==b)
(这就是为什么不在ifs中编写:if(a=3)
因为它将赋值a=3
,并且总是进入如果首先,您的反向函数不返回任何内容,因此尝试将其返回值赋值给任何内容都是行不通的:
tempstring[62] == reverse(Characters); // won't work as it is attempting to compare a void
tempstring[62] = reverse(Characters); // won't work as it is attempting to assign a void
从更基本的层面来看,回文的测试远没有你所做的那么复杂:
bool Palindrome(char Characters[], unsigned long length)
{
bool result = true;
for(int i=0; i < length / 2; i++)
{
if (Characters[i] != Characters[length - i - 1])
{
result = false;
break;
}
}
return result;
}
bool回文(字符[],无符号长)
{
布尔结果=真;
对于(int i=0;i
您的主要问题是,即使reverse函数为void(不返回任何内容),您仍试图为tempstring[62]赋值。只需按照Ed Heal的答案来做就可以了。@bathseba没有被调用的长度是多少?@DieterLücking:很抱歉回答不完整。我现在已经解决了这个问题。@user3078582:我已经编辑了,给出了一个更全面的答案。你仍然建议(即使你提到:它也不起作用)tempstring[62]=反向(字符)是的,这是一个很难回答的问题:你确实想指出==和=之间的区别,尽管在这个例子中它们都不是你想要的。希望粗体类型可以解决这个问题。当我这样做的时候,我还必须声明长度,因为长度在reverse的原型中,这在函数'bool-Pali'中给了我这个错误ndrome(char*,long unsigned int)':Reversal2.cpp:97:19:错误:无效值未被忽略,因为它应该是tempstring[62]=reverse(字符,长度);您的reverse
函数声明为void
,但您希望它返回一个值存储在tempstring
中。您还尝试为索引62分配一个值,从而脱离了tempstring
数组的末尾。有效的索引从0到61。感谢您的输入,但我希望能够看到图I当我使用另一个函数时,它只是练习而已,我想知道我做错了什么?因为我在main中也调用了同一个反向函数好几次。@edheal@user3078582-见上文,如果没有第一次编辑“记住使用删除”,这将是一个可接受的答案@他想要一个反向函数。第一部分更好solution@EdHeal返回新内容的函数通常不好(除了分配器等)
tempstring[62] == reverse(Characters);
tempstring[62] == reverse(Characters); // won't work as it is attempting to compare a void
tempstring[62] = reverse(Characters); // won't work as it is attempting to assign a void
bool Palindrome(char Characters[], unsigned long length)
{
bool result = true;
for(int i=0; i < length / 2; i++)
{
if (Characters[i] != Characters[length - i - 1])
{
result = false;
break;
}
}
return result;
}