Chinaunix首页 | 论坛 | 博客
  • 博客访问: 23654
  • 博文数量: 7
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 21
  • 用 户 组: 普通用户
  • 注册时间: 2014-02-19 16:37
文章分类

全部博文(7)

文章存档

2014年(7)

我的朋友

分类: LINUX

2014-09-25 11:08:44

原文地址:判断回文字符串 作者:来年背书包

  所谓回文字符串,是指一个字符串从左到右读和从右到左读是完全一样的。比如"php、 “aasaa”、“12321” 。

    判定方法一:一般方法,如下截图部分
    
    返回1表示是回文字符串,0表示不是。
    

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <assert.h>
  3. int fun(char *str)
  4. {
  5.  assert(str != NULL);
  6.  
  7.  char *p_head = str;
  8.  char *p_end ;
  9.  while(*str != '\0')
  10.  {
  11.   str++;
  12.  }
  13.  p_end = str - 1; //让str的地址指向'\0'的前一位
  14.  while(p_head <= p_end)
  15.  {
  16.   if(*p_head++ != *p_end--)
  17.    return 0;
  18.   else
  19.    break;
  20.  }
  21.  return 1;
  22. }
  23. int main(int argc, const char *argv[])
  24. {
  25.  
  26.  char str[1024];
  27.  printf("Input a string:");
  28.  scanf("%s",str);
  29.  printf("%d\n",fun(str));
  30.  return 0;
  31. }




判定方法二:递归,代码部分如下图
说明:
1. 字符串长度可能会奇数或偶数:


奇数:当两端的字符串两两比较检查后会剩下最中间那位字符,当检查到长度为1的时候即代表此字符串是回文。

偶数:当两端的字符串两两比较检查后不会剩下字符。即检查到长度为0的时候即代表此字符串是回文。

2. 如果检查到两端两个字符不相同。则说明此字符串不是回文,直接返回0,不需要继续检查。

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <string.h>
  3. //判断是否为回文字符窜。
  4. int fun(int low,int high,char * str,int length)
  5. {
  6.  
  7.  if (length == 0 || length == 1)
  8.   return 1;
  9.  if (str[low] != str[high])
  10.   return 0;
  11.  return fun(low+1, high-1, str, length-2);
  12. }
  13. int main(int argc, const char *argv[])
  14. {
  15.  
  16.  char str[1024];
  17.  printf("Input a string: ");
  18.  scanf("%s",str);
  19.  int length = strlen(str);
  20.  //返回1代表是, 0代表不是
  21.          
  22.  printf( "%d\n",fun(0, length-1, str, length));
  23.  return 0;
  24. }





 



   


阅读(1405) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~