一个简单的程序,一个用于读取输入的静态字符串,然后将其传递给函数。只是想知道为什么它不能使用while(* string!='\ 0')表达式找到'\ 0'字符。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int is_palindrome(char *string)
{
int length, mid, end, i;
length=0;
if (string == NULL)
return 0;
while (string[length] != '\0')
{
printf("%c\n", string[length]);
length++;
}
//Not working version
/*
while(*string!='\0')
length++;
*/
end = length - 1;
mid = length / 2;
printf(" end=%d, mid=%d\n", end, mid);
for (i = 0; i < mid; i++) {
if (string[i] != string[end]) {
printf("It's not palindrome\n");
return 0;
}
end--;
}
if (i == mid) {
printf("It's palindrome\n");
return 1;
}
return 0;
}
int main(void)
{
char string[100];
printf("Enter a string to test for the parlindrome\n");
gets(string);
int length = strlen(string);
printf("You entered %s,length is %d\n", string, length);
if (is_palindrome(string))
;
printf("Enter to Quit\n");
char x;
scanf("%c", &x);
return 0;
}
答案 0 :(得分:3)
而不是
while(*string!='\0')
length++;
写
char* p = string;
while( *p++ )
length++;
否则指针不会移动而你会陷入无限循环(如果字符串不为空)。使用p
以避免更改原始指针。
在使用它们之前,还要初始化所有变量,这是一个很好的经验法则。
答案 1 :(得分:1)
在length
循环中使用其值之前,将while
初始化为0。
或者您可以使用标准库函数strlen()
。
此外,在回文检查中,您应该在增加end
的同时减少i
。实际上,您将前半部分中的字符与最后的相同字符进行比较。这将匹配像“aaaabfa”而不是“abcdcba”的字符串。