我正在编写一个函数来检查一串字符是否是回文。 例如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,我看不出我错在哪里。
答案 0 :(得分:0)
有几个问题。首先,对string[i] == ' '
和string[j] == ' '
的测试是毫无意义的。以前的线路保证它们不会是空格;如果他们是,你会跳过他们。
你的减法方式也有问题 - 你永远不会检查以确保你没有在字符串的开头运行。我认为处理它的最简单方法是不允许我增加超过j,并且不允许j递减超过i。
我不明白你对于奇怪的空间和双重空间没有回收意味着什么。你忽略了回文中的空格(否则“一罐金枪鱼的坚果”不会是一个)。是否必须至少有一个非空格字符才能被判断为回文?我只需添加一个布尔值并将其设置在for()循环的底部,以显示您至少有一个非空格字符,并将最终返回值基于该布尔值。