C++判断回文字符串

news/2025/2/25 14:42:24

C++判断回文字符串

  • 1、使用reverse()函数反转
  • 2、使用循环,借助变量首尾比较
  • 3、双指针
    • 方法1:while循环
    • 方法2:for循环

1、使用reverse()函数反转

思路:

  1. 首先读取一个字符串并存储在变量 s 中

  2. 将字符串 s 复制到另一个字符串变量 s1 中,保留原始字符串

  3. 使用 reverse 函数反转字符串 s

  4. 比较两个字符串,判断是否为回文串

#include<bits/stdc++.h>
using namespace std;
string s,s1;
int main(){
    cin>>s;
	s1=s;
	reverse(s.begin(),s.end());
    if(s==s1) 
		cout<< "yes";
    else 
		cout<< "no";
    return 0;
}

2、使用循环,借助变量首尾比较

思路:

  1. 输入的字符串
  2. 对字符串的前半部分进行遍历
  3. 在遍历过程中,比较当前字符与字符串末尾对应位置的字符
  4. 如果发现不相等的字符,输出“no”并结束程序;否则,遍历结束后输出“yes”
#include<bits/stdc++.h>
using namespace std;
int main(){
	string s;
    cin >> s;
    int len = s.size();
    for(int i = 0; i < len / 2; i++){
        if(s[i] != s[len-1-i]){
            cout << "no";
            return 0;
        }
    }
    cout << "yes";
    return 0;
}

3、双指针

通过双指针法,从字符串的两端向中间遍历,比较对应位置的字符来判断字符串是否为回文串

方法1:while循环

思路:

  1. 输入的字符串 s
  2. 设置两个指针 i 和 j,分别指向字符串的开头和结尾。同时,设置一个标志变量 flag 为 1,表示默认字符串是回文串
  3. 使用 while 循环,当 i 小于 j 时,比较 s[i] 和 s[j]
    1) 如果不相等,将 flag 设置为 0,并跳出循环
    2)如果相等,继续循环,同时 i 增加,j 减少,向字符串中间移动
  4. 根据 flag 的值判断字符串是否是回文串
    1) 如果 flag 为 1,输出“是回文串”
    2)如果 flag 为 0,输出“不是回文串”
#include <bits/stdc++.h>
using namespace std;
int main() {
	string s; 
	cin >> s;
	int i = 0, j = s.size() - 1;
	int flag = 1; 
	while(i < j){
		if(s[i] != s[j]){
			flag = 0;
			break;
		}
		i++,j--;
	}
	if(flag){
		cout << "是回文串";
	}else{
		cout << "不是回文串";
	}
	return 0;
}

方法2:for循环

思路:

  1. 输入字符串
  2. 设置首尾指针和标志变量
  3. 从两端向中间遍历,比较字符
  4. 不相等则标记为非回文,停止循环,相等则继续
  5. 根据标记输出“是回文串”或“不是回文串”
#include <bits/stdc++.h>
using namespace std;
int main() {
	string s; 
	cin >> s;
	int len= s.size() - 1;
	int flag = 1; 
	for(int i = 0, j = len; i < j; i++, j--){
        if(s[i] != s[j]){
            flag = 0;
            break;
        }
    }
	if(flag){
		cout << "是回文串";
	}else{
		cout << "不是回文串";
	}
	return 0;
}

http://www.niftyadmin.cn/n/5865616.html

相关文章

【Godot4.3】基于绘图函数的矢量蒙版效果与UV换算

概述 在设计圆角容器时突发奇想&#xff1a; 将圆角矩形的每个顶点坐标除以对应圆角矩形所在Rect2的size&#xff0c;就得到了顶点对应的UV坐标。然后使用draw_colored_polygon&#xff0c;便可以做到用图片填充圆角矩形的效果。而且这种计算的效果就是图片随着其填充的图像缩…

akka现有的分布式定时任务框架总结

根据你的需求&#xff0c;以下是一些基于 Akka 实现的分布式定时任务框架&#xff0c;以及相关的 GitHub 项目推荐&#xff1a; 1. Openjob Openjob 是一个基于 Akka 架构的新一代分布式任务调度框架&#xff0c;支持多种定时任务、延时任务、工作流设计&#xff0c;采用无中…

CES Asia 2025,技术创新成招商强引力

近日&#xff0c;2025年中国经济白皮书正式发布&#xff0c;为第七届亚洲消费电子技术贸易展&#xff08;CES Asia 2025&#xff09;的招商工作注入强大动力&#xff0c;其在技术创新方面展现出的显著优势&#xff0c;成为吸引全球科技企业的关键因素。 白皮书全面展示了中国在…

C#文件操作

文件类File 常用方法介绍Open()打开文件Create()创建文件Copy()复制文件Delete()删除文件Exists()判断文件是否存在Move()移动文件Replace()替换文件AppendAllText()新建并添加文本ReadAllText()打开并读取文本内容 1.读取文件 1.创建一个Filestream 对象 (引入System.IO命名…

Linux版本控制器Git【Ubuntu系统】

文章目录 **前言**一、版本控制器二、Git 简史三、安装 Git四、 在 Gitee/Github 创建项目五、三板斧1、git add 命令2、git commit 命令3、git push 命令 六、其他1、git pull 命令2、git log 命令3、git reflog 命令4、git stash 命令 七、.ignore 文件1、为什么使用 .gitign…

Deepseek引爆AI热潮 防静电地板如何守护数据中心安全

近期&#xff0c;Deepseek的爆火将人工智能推向了新的高度&#xff0c;也引发了人们对AI背后基础设施的关注。作为AI运行的“大脑”&#xff0c;数据中心承载着海量数据的存储、处理和传输&#xff0c;其安全稳定运行至关重要。而在这背后&#xff0c;防静电地板扮演着不可或缺…

告别阻塞,迎接高效:掌握 AsyncIOScheduler 实现异步任务调度

前言 时间在编程中是宝贵的,直接关联到效率与灵活性,尤其在异步编程里,如何优雅地管理定时任务简直是一门“艺术”。如果你还在用 time.sleep() 来控制延时任务,恐怕你早已体会过它的“痛苦”:程序卡住、线程阻塞、性能急剧下滑。想象一下,你的程序如同一个永远无法按时…

HTML应用指南:利用GET请求获取全国泸溪河门店位置信息

随着新零售业态的快速发展,门店位置信息的获取变得越来越重要。作为新兴烘焙品牌之一,泸溪河自2013年在南京创立以来,一直坚持“健康美味,香飘世界”的企业使命,以匠人精神打造新中式糕点。为了更好地理解和利用这些数据,本篇文章将深入探讨GET请求的实际应用,并展示如何…