编写一个能判断一字符串是否为回文的程序,回文即:"asdfghjhgfdsa"这样的字符串:
int fun(char *p)
{
if (p == NULL)
return -1;
char *pstart = p;
char *pend = p;
while (*pend)
{
pend++;
}
pend--;
while (pstart < pend)
{
if (*pstart != *pend)
return 0;
pstart ++;
pend --;
}
return 1;
}
首先判断是否出错,出错返回-1,然后定义2个指针分别指向字符串的头和尾,
设定一个循环来判断它前后2个字符是否相同,一旦有不同的则返回0,否则就是回文,返回1。
这个程序其实很简单,但为什么要拿出来讲呢,主要是因为我自己做这道题目的时候犯了一个很严重的错误。
当时,我的想法是,将先定义一个字符数组保存下这个字符串,再将它逆序,然后利用strcpy函数比较它是否发生了变化。
但执行下来却发现,始终是段错误。究其原因,是一个老生常谈的问题,用指针改变了字符串常量的值。