ispalindrome C,检查空间的问题

时间:2017-09-19 02:21:35

标签: c string function palindrome

我正在编写一个函数来检查一串字符是否是回文。 例如aba,abba,ba,ba,一罐金枪鱼的坚果。 Abba不是回文和" "(奇数空间)和" "(双倍空间)不是。

int is_palindrome(const char string[]) {

  // This implementation is only partly correct
  int string_length = length(string);
  int i = 0, j = string_length - 1;
  for (i = 0; i < j + 1; i++, j--) {
    while (string[i] == ' ') {
      i = i + 1;
    }
    while (string[j] == ' ') {
      j = j - 1;
    }
    if (string[i] == ' ' && string[j] == ' ') {
      break;
    }

    if (string[i] != string[j]) {
      return 0;
    }
  }
  return 1;
}

然而,我真正的问题是这个函数无法检查oddspace和doublespace,我看不出我错在哪里。

1 个答案:

答案 0 :(得分:0)

有几个问题。首先,对string[i] == ' 'string[j] == ' '的测试是毫无意义的。以前的线路保证它们不会是空格;如果他们是,你会跳过他们。

你的减法方式也有问题 - 你永远不会检查以确保你没有在字符串的开头运行。我认为处理它的最简单方法是不允许我增加超过j,并且不允许j递减超过i。

我不明白你对于奇怪的空间和双重空间没有回收意味着什么。你忽略了回文中的空格(否则“一罐金枪鱼的坚果”不会是一个)。是否必须至少有一个非空格字符才能被判断为回文?我只需添加一个布尔值并将其设置在for()循环的底部,以显示您至少有一个非空格字符,并将最终返回值基于该布尔值。