ispalindrome C,检查问题 space
ispalindrome C, problems with checking space
我正在编写一个函数来检查一串字符是否为回文。
例如aba,abba,a ba,a ba,一个坚果换一罐金枪鱼。
Abba 不是回文," "(odd space) 和" "(double space) 不是。
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,我看不出哪里错了。
几个问题。首先,测试 string[i] == ' '
和 string[j] == ' '
是没有意义的。前面几行已经保证不会是spaces;如果是,您会跳过它们。
你递减 j 的方式也有问题——你从不检查以确保你没有 运行 离开字符串的开头。我认为最简单的处理方法是不允许 i 递增超过 j,也不允许 j 递减超过 i。
我不明白你说的奇数 space 和双数 space 不是回文是什么意思。你忽略回文中的 spaces(否则 "a nut for a jar of tuna" 就不是一个)。是不是必须至少有一个非space字符才能判断为回文?我只是添加一个布尔值并将其设置在 for() 循环的底部以显示您至少有一个非 space 字符并将最终的 return 值基于该布尔值。
我正在编写一个函数来检查一串字符是否为回文。 例如aba,abba,a ba,a ba,一个坚果换一罐金枪鱼。 Abba 不是回文," "(odd space) 和" "(double space) 不是。
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,我看不出哪里错了。
几个问题。首先,测试 string[i] == ' '
和 string[j] == ' '
是没有意义的。前面几行已经保证不会是spaces;如果是,您会跳过它们。
你递减 j 的方式也有问题——你从不检查以确保你没有 运行 离开字符串的开头。我认为最简单的处理方法是不允许 i 递增超过 j,也不允许 j 递减超过 i。
我不明白你说的奇数 space 和双数 space 不是回文是什么意思。你忽略回文中的 spaces(否则 "a nut for a jar of tuna" 就不是一个)。是不是必须至少有一个非space字符才能判断为回文?我只是添加一个布尔值并将其设置在 for() 循环的底部以显示您至少有一个非 space 字符并将最终的 return 值基于该布尔值。