如何在函数内调用函数?

时间:2014-02-12 22:07:39

标签: c++ function compiler-construction reverse palindrome

我试图确定我的代码是否是回文,所以我创建了一个反向函数,然后是一个回文函数。我试图将反转的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;

    }
}

5 个答案:

答案 0 :(得分:4)

首先,你有一个错字; ==是比较平等=。你应该写的

tempstring[62] = reverse(Characters);

但这仍然无效。对于初学者,reversevoid函数,因此它不会返回值。

最快的解决方法是用

替换该行
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;
}