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