判断字符串是否对称

用这个函数可以判断 传入的是字符串指针不限制字符查指针

int fun(const char * str)
{
    int len = strlen(str);
    int i;
    for(i = 0; i < len/2; i++)
    {
        if(*(str+i) != *(str+len-i-1))
            return 1; //如果不是回文返回1
    }
    return 0; //如果是回文返回0

}

用递归判断字符串是否为回文串

#include <stdio.h> 
#define SIZE 50 
int isPalindrome(char str[]); 
int elementSize=0; 
static int i=0; 
int main() 

int j=0,result; 
char element,str[SIZE]; 
printf("请输入字符串,以回车结束:\n"); 
/*以下用循环结构读入字符数组的元素,防止了因字符串中含有空格而不能全部读入的情况*/ 
scanf("%c",&element); 
while(element!='\n') 

str[j]=element; 
elementSize++;//记录了数组中已有元素的个数 
j++; 
scanf("%c",&element); 


if(isPalindrome(str)) 
printf("该字符串是回文字符串\n"); 
else 
printf("该字符串不是回文字符串\n"); 

// system("pause"); 
return 0; 

/*函数功能:判断字符串是否为回文串*/ 
int isPalindrome(char str[]) 

/*把数组元素前后对应比较,即第一个元素与最后一个元素比较是否相等,依此类推*/ 
if(i>=elementSize-i-1)//说明是回文串 
return 1; 

else if(str[i]==str[elementSize-i-1]) 

i++;//i为全局静态变量 
isPalindrome(str); 


else //出现不相等的情况,说明不是回文串,返回0 
return 0; 
}

另外一种算法:

/*用顺序储存结构*/
#include"stdio.h"
void main()
{
char str[100];
int i=0,a,b,j,k;
gets(str);
while(str[i]!='\0')
i++; //计算串的长度
if(i%2==0)
{
a=i/2-1;b=i/2; //计算中心位置 
}
else
{
a=i/2-1;b=i/2+1;
}
for(j=a,k=b;j>=0,k<=i;j--,k++) //判断是否回文//
{
if(str[j]!=str[k])
break;
}
if(k==i+1)
printf("Yes,it is!\n");
else
printf("it's not.\n");
}

阅读更多
文章标签: system 算法 fun c
上一篇静态链接库(Lib)与动态链接库(DLL)的区别
下一篇C语言、UNIX之父丹尼斯·里奇
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭