字符串回文,翻转

简介: 字符串回文,翻转

前言

从这篇文章开始进行算法的学习,开启新的篇章。


一、字符串回文

字符串回文 : 是指一个字符串从左到右读和从右到左读是一样的,即它的字符顺序颠倒后仍然保持不变。例如,"level"和"madam"就是回文字符串

在编程中,我们可以使用不同的算法来判断一个字符串是否是回文。

方法 一:

将字符串 一分文二,通过第一个下标 i 和 最后一个下标 j , 从两边开始逐个字符地向中间进行比较。如果 两边相等则不进入 if 语句,返回1,是回文。否则 返回 0 ,不是回文。需要注意的是,数组下标从 0 开始,所以 j = len - 1

int palindrome(char* str)
{
    int i = 0, j = 0;
    int len = strlen(str);
    for (i = 0, j = len - 1; i < j; i++, j--)
    {
        if (str[i] != str[j])         //不相等则 返回 0,不是回文
        {
            return 0;
        }
    }
  return 1;               //返回 1,是回文
}
int main(void)
{
  int ret = palindrome("124321");       //要检测的字符串
    if (ret)
    {
        printf("是回文\n");
    }
    else
    {
        printf("不是回文\n");
    }
  return 0;
}

方法 二:

方法二 主要是将 原字符串进行翻转(字符串翻转下面会讲),将翻转后的字符串与原字符串进行比较,如果相等,是回文。否则,不是回文。使用 strncmp 函数进行比较字符串是否相等。

由于 数组下标从 0 开始,所以 i = len -1 ;

int main(void)
{
  char str[20];
  char buff[20];
  int ret;
  printf("请输入字符串:");
  scanf_s("%s",str, sizeof(str));         //输入要判断的字符串
  int len = strlen(str);
  buff[len] = '\0';
  for (int i = len-1; i >= 0 ; i--)
  {
    buff[len-1 - i] = str[i];
    if (i == 0)
    {
      if (strncmp(buff, str, 20) == 0)      // 相等返回 0
        printf("是回文\n");
      else                    
      {
        printf("不是回文\n");
      }
    }
  }
  return 0;
}

注意 :

推荐第一种写法,使用封装函数的方法进行 字符串回文判断,更利于代码的移植。方法二 如果 禁止 使用 strncmp 函数,则 无法实现功能。要学会,理解方法一的思想,更加简便。

二、字符串翻转

字符串翻转是指将一个字符串的字符顺序颠倒过来,即将字符串的最后一个字符放在第一个位置,倒数第二个字符放在第二个位置,以此类推,最后得到一个完全颠倒的字符串。

在编程中,我们可以使用不同的算法来实现字符串翻转的功能。

方法 一:

主要是 通过定义一个中间变量的方法,进行字符串元素的 替换。先将前面的字符 先赋给 中间变量 temp ,再 将 后面的字符 赋给 前面的字符,最后 中间变量 temp 赋给 后面的字符。

由于 数组下标从 0 开始,所以 j = len -1 ;

void restring(char* str)
{
    int i, j;
    int len = strlen(str);
    char temp = 0;
    for (i = 0, j = len - 1; i < j; i++, j--)
    {
        temp = str[i];
        str[i] = str[j];
        str[j] = temp;
    }
}
int main(void)
{
    char str[20] = {"12345"};
  restring(str);
  printf("str = %s\n", str);
  return 0;
}

方法 二:

输入要反转的字符串,即可打印翻转结果。

定义两个字符数组,分别存放原字符串 和 翻转后的字符串。将原字符串的字符一次从后向前 传入 buff 数组即可。

由于 数组下标从 0 开始,所以 i = len -1 ;

int main(void)
{
  char str[20];
  char buff[20];
  printf("请输入字符串:");
  scanf_s("%s",str,sizeof(str));
  int len = strlen(str);
  printf("翻转结果:");
  for (int i = len-1; i >=0; i--)
  {
    buff[len -1 - i] = str[i];
    printf("%c", buff[len -1 -i]);
  }
  return 0;
}

注意 :

还是推荐第一种写法,使用封装函数的方法进行 字符串回文判断,更利于代码的移植。要学会,理解方法一的思想,更加简便。


总结

字符串回文,翻转 是笔试热门题,大家好好理解。

相关文章
|
缓存 网络协议 网络性能优化
UDP实现可靠传输
UDP实现可靠传输
|
分布式计算 关系型数据库 BI
加速查询MaxCompute再对接FBI(帆软)的完整链路来啦!
本文旨在分享使用交互式分析查询MaxCompute数据,再对接FBI的完整链路,快速搭建大数据生态完整链路。
4870 0
|
9月前
|
人工智能 编解码 数据建模
MIT颠覆传统!分形生成模型效率暴涨4000倍,高分辨率图像秒级生成
Fractal Generative Models 是麻省理工学院与 Google DeepMind 团队推出的新型图像生成方法,基于分形思想,通过递归调用模块构建自相似架构,显著提升计算效率,适用于高分辨率图像生成、医学图像模拟等领域。
355 0
MIT颠覆传统!分形生成模型效率暴涨4000倍,高分辨率图像秒级生成
|
索引
bisect_left,bisect_right,bisect的用法,区别以及源码分析
bisect_left,bisect_right,bisect的用法,区别和源码分析
735 0
bisect_left,bisect_right,bisect的用法,区别以及源码分析
|
Prometheus Cloud Native Perl
评测Loki日志工具
评测Loki日志工具
352 0
|
jenkins Java 持续交付
【一键搞定!】Jenkins 自动发布 Java 代码的神奇之旅 —— 从零到英雄的持续集成/部署实战秘籍!
【8月更文挑战第9天】随着软件开发自动化的发展,持续集成(CI)与持续部署(CD)已成为现代流程的核心。Jenkins 作为一款灵活且功能丰富的开源 CI/CD 工具,在业界应用广泛。以一家电商公司的 Java 后端服务为例,通过搭建 Jenkins 自动化发布流程,包括创建 Jenkins 项目、配置 Git 仓库、设置构建触发器以及编写构建脚本等步骤,可以实现代码的快速可靠部署。
531 2
|
Python
递归魔法:判断字符串是否为回文
本文介绍了如何使用递归判断一个字符串是否是回文。回文字符串是指正读和反读都相同的字符串。文章详细讲解了递归的基本思想和Python实现,并通过多个示例验证了函数的正确性。递归方法通过将大问题分解成更小的子问题,使得判断回文变得简单高效。
395 5
|
存储 算法 搜索推荐
Python进阶必备:字典树Trie与后缀树Suffix Array,效率提升的神器!
在Python编程中,掌握高效的数据结构对于提升程序性能至关重要。本文将深入探讨两种强大的字符串处理数据结构——字典树(Trie)与后缀数组(Suffix Array)。字典树,又称前缀树,适用于自动补全和拼写检查等功能。例如,在文本编辑器中实现自动补全时,字典树能够即时提供单词补全选项。后缀数组则用于存储字符串的所有后缀并按字典序排序,结合最长公共前缀(LCP)数组,可以高效解决许多字符串问题,如查找最长重复子串等。通过实际案例,我们将展示这两种数据结构的强大功能,帮助你在Python编程中更进一步。
279 2
|
算法 C++ 容器
【C++11算法】iota算法
【C++11算法】iota算法
762 0
|
Ubuntu 应用服务中间件 Linux
在Linux中,如何配置Web服务器(如Apache或Nginx)?
在Linux中,如何配置Web服务器(如Apache或Nginx)?

热门文章

最新文章