0

一个简单的程序,一个静态字符串,用于读取输入,然后将其传递给函数。只是想知道为什么使用 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;
}
4

2 回答 2

3

代替

while(*string!='\0')
  length++;

char* p = string;
while( *p++ )
  length++;

否则指针将不会移动,您将陷入无限循环(如果字符串不为空)。用于p避免更改原始指针。

在使用它们之前还要初始化所有变量,这是好的经验法则。

于 2013-04-27T03:08:48.510 回答
1

在循环length中使用其值之前初始化为 0。while

或者您可以使用标准库函数strlen()

此外,在回文检查中,您可能应该end在增加的同时减少i。实际上,您将前半部分的字符与最后的相同字符进行比较。这将匹配诸如“aaaabfa”之类的字符串,但不匹配“abcdcba”。

于 2013-04-27T02:54:28.123 回答