[英]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.