我试图确定我的代码是否是回文,所以我创建了一个反向函数,然后是一个回文函数。我试图将反转的Character数组分配给新函数,但我似乎无法编译....任何提示? 这是我的回文功能
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;
}
}
答案 0 :(得分:4)
首先,你有一个错字; ==
是比较平等=
。你应该写的
tempstring[62] = reverse(Characters);
但这仍然无效。对于初学者,reverse
是void
函数,因此它不会返回值。
最快的解决方法是用
替换该行reverse(Characters, length);
(请注意,我还要根据需要传递length
参数。)
最后一件事:如果您已对文件进行了整理,以便在reverse
之后显示Palindrome
,那么您需要使用以下语句转发声明 reverse
:
void reverse(char Characters[], unsigned long length);
修复了编译错误。我请您检查运行时行为。
答案 1 :(得分:1)
您的错误是tempstring[62] == reverse(Characters);
行。你不需要double =符号。将来,发布编译时收到的错误消息会很有帮助。
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;
}
}
答案 2 :(得分:1)
你这使得这很复杂。
找到字符串的末尾(strlen
)。一次从两端读取一个字符,如果它们不匹配,那么它不是回文。如果索引变得相同或者它们交叉,那么你就完成了。它确实是一个回文。
即
bool Palindrome(char *s) {
int left = 0, right = strlen(s) - 1;
while (left < right) {
if (s[left] != s[right] return false;
++left;
--right;
}
return true;
}
修改强>
构建反向
也是徒劳的char *Reverse(char *s)
{
char *rev = new char[strlen(s) + 1];
int left = 0, right = strlen(s) - 1;
while (right > -1) {
rev[left] = s[right];
right--;
left++;
}
rev[left] = 0;
// Remember to use delete[]
return rev;
}
编辑2
或者
void Reverse(char[] s, int len) {
int left = 0; right = len;
while (right > -1) {
char t = s[left];
s[left] = s[right];
s[right] = t;
left++; right--;
}
}
然后复制该字符串,将其反转并进行比较。
答案 3 :(得分:0)
您的错误在这里:
tempstring[62] == reverse(Characters);
您写过==
表示返回true或false的条件(例如:if (5 == 7)
- &gt; false)
但你真正想做的是tempstring[62] = reverse(Characters);
一个=
表示相等(int a = 3
)
两个==
表示检查条件(例如if (a == b)
(这就是为什么你不写ifs:if(a = 3)
,因为它会分配a = 3
并且总是进入if
答案 4 :(得分:0)
首先,您的反向函数不返回任何内容,因此尝试将其返回值分配给任何内容都不起作用:
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;
}