判斷字串是不是迴文的兩種方法
阿新 • • 發佈:2019-01-27
方法一:用棧存取前半截數,然後與後半截挨個比較。
#include<stdlib.h> #include<stdio.h> #include<string.h> int main(int argc,char* argv[]) { char a[101],s[101]; int mid,len,top,i,next; gets(a); //讀入字串 len=strlen(a); mid=len/2-1; //求中間點 top=0; for(i=0;i<=mid;i++) //將0到mid賦值,對於偶數,則正好是給前半段賦值 { //若是奇數,則給前面len/2個數賦值,中間的數及後len/2個數未賦值 s[++top]=a[i]; } if(len%2==0) //判斷len是奇數還是偶數 next=mid+1; //若是偶數,則從mid+1開始與前面半段比較 else next=mid+2; //若是奇數,則空過mid+1,從mid+2開始與前面半段比較 for(i=next;i<=len-1;i++) { if(a[i]!=s[top]) //若比較時,兩數不等,則推出,此時top不可能為0 break; top--; //若兩數相等,則繼續比較,top減一 } if(top == 0) //若所有的數都相等,則此時的top會減到0,則是迴文 printf("YES! 是迴文!\n"); else printf("NO! 不是迴文!\n"); getchar(); }
方法二:用兩個指標,分別指向第一個數和最後一個
#include<stdlib.h> #include<stdio.h> #include<string.h> int main(int argc,char* argv[]) { char a[101]; int len,i,j; gets(a); len=strlen(a); for(i=0,j=len-1;i<j;i++,j--) { if(a[i]!=a[j]) { printf("NO\n");break; } } if(i==len/2) //若是迴文,對於偶數,i會加到len/2,j會減到len/2-1; printf("YES\n"); //對於奇數, i會加到中間那個數,及len/2,j也是 system("pause"); }