問題描述:判斷一個字元串是否是回文字元串。程式分析:回文字元串:回文字元串是指一個字元中的最高位與最低位的字元是一樣的,次高位和次低位上的字元是一樣的
問題描述:
判斷一個字元串是否是回文字元串。
程式分析:
回文字元串:
回文字元串是指一個字元中的最高位與最低位的字元是一樣的,次高位和次低位上的字元是一樣的,以此類推。同時,值得注意的是單個字元,或者多個重複的字元也是回文字元串。
(1)定義一個判斷回文數的函數,按照上面給出的回文數的定義,我們進行判斷。
(2)本程式在主函數傳入字元串的過程中發現了用gets函數與用scanf函數的不一樣之處。我想讓這個程式在一個while循環的控制下可以判斷多個字元串再結束。這時候如果用gets不斷的讀取str的内容則會出現錯誤。gets讀取緩沖區中的内容,當我們每次敲下Enter鍵德爾時候,gets就讀取了'\0'。這就是為什麼每次我們看到的除(第一次以外)每次還沒輸入值的時候就判斷是回文字元串。
代碼如下:
#include
#include
#defineLENTH 100
int IS_palindromic_str(char arr[]) //定義判斷回文字元串的函數
{
char *left = arr;
//定義指針left指向數組的第一個元素
char *right;
//定義指針right
while(*arr !='\0') //結束條件是通路到字元串中的'\0'
{
arr++;
}
right = arr - 1;
while(left <= right)
{
if(*left == *right) //判斷是否符合回文字元串的條件
{
left ++;
right--;
}
else
return 0; //注意這時候先傳回0
}
return 1;
}
int main()
{
char str[100] ;
int i = 1;
while(i)
{
printf("Please input a string:\n");
gets(str);
//scanf("%s",str);
if((IS_palindromic_str(str)== 1))
printf("str is a palindromic string\n");
else
printf("str is not a palindromic string\n");
printf("continue:1,break:0\n");
scanf("%d",&i);
fflush(stdin); //如果用gets函數傳入str則要使用一個輸入記憶體清空函數
}
return 0;
}