簡體   English   中英

未檢測到行尾字符

[英]end of line character is not detected

一個簡單的程序,一個靜態字符串,用於讀取輸入,然后將其傳遞給函數。 只是想知道為什么使用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;
}

代替

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

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

否則,指針將不會移動,並且您將陷入無限循環(如果字符串不為空)。 使用p避免更改原始指針。

使用它們之前,還要初始化所有變量,這是一個很好的經驗法則。

while循環中使用其值之前,將length初始化為0。

或者,您可以使用標准庫函數strlen()

同樣,在回文檢查中,您應該減少end ,同時增加i 照原樣,您正在將前半部分的字符與末尾相同的字符進行比較。 這將匹配字符串“ aaaabfa”而不是“ abcdcba”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM