1. 程式人生 > >判斷字串是不是迴文的兩種方法

判斷字串是不是迴文的兩種方法

方法一:用棧存取前半截數,然後與後半截挨個比較。

#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");
}