查找回文字符串

查找回文字符串编写一个程序,寻找一篇英文文章中最长的回文字符串。回文字符串是具有回文特性的字符串:即该字符串从左向右读,与从右向左读都一样。输入文件不会超过500字符。这个文件可能一行或多行,但是每行都不超过80个字符(不包括最后的换行符)。在寻找回文时只考虑字母‘A’-‘Z’和‘a’-‘z’,忽略其他字符(例如:标点符号,空格等)。输出的第一行应该包括找到的最长的回文的长度。下一行或几行应该包括这个回文的原文(没有除去标点符号,空格等),把这个回文输出到一行或多行(如果回文中包括换行符)。如果有多

大家好,又见面了,我是你们的朋友全栈君。

编写一个程序,寻找一篇英文文章中最长的回文字符串。

回文字符串是具有回文特性的字符串:即该字符串从左向右读,与从右向左读都一样。

输入文件不会超过500字符。这个文件可能一行或多行,但是每行都不超过80个字符(不包括最后的换行符)。在寻找回文时只考虑字母 ‘A’ – ‘Z’ 和 ‘a’ – ‘z’ ,忽略其他字符(例如:标点符号,空格等)。

输出的第一行应该包括找到的最长的回文的长度。下一行或几行应该包括这个回文的原文(没有除去标点符号,空格等),把这个回文输出到一行或多行(如果回文中包括换行符)。如果有多个回文长度都等于最大值,输出最前面出现的那一个。

测试输入:Confucius say: Madam, I’m Adam.
预期输出:
11
Madam, I’m Adam

#include <iostream>
#include<cstring>
using namespace std;
int main()
{ 

int m=0;
char str[500];
while((str[m]=cin.get())!=EOF)
m++;
str[m]='\0';//输入字符数组
int x=0,d=0,a[500];
char s[500];//定义新的数组记录所提取的字符
do
{ 

if((str[x]>='a'&&str[x]<='z')||(str[x]>='A'&&str[x]<='Z'))
{ 

s[d]=str[x];
a[d]=x;
d++;
}
x++;
}while(str[x]!='\0');
s[d]='\0';//提取原字符数组中英文字母
int len = strlen(s);
int start = 0;//回文字符串最前面的位置
int maxlen = 0;//回文字符串最大长度
int low;//回文字符位于中间位置前的字符位置
int high;//回文字符位于中间位置后的字符位置
for (int i=1;i<len;i++)//i表示回文字符串中间元素下标
{ 

//回文字符串偶数长度
low=i-1;
high=i;
while (low>=0&&high<len&&(s[low]==s[high])||(s[low]==(s[high]-32))||((s[low]-32)==s[high]))
{ 

if ((high-low+1)>maxlen)
{ 

maxlen=high-low+1;
start=low;
}
low--;
high++;
}
}
for (int i=1;i<len;i++)
{ 

//回文字符串奇数长度
low=i-1;
high=i+1;
while (low>=0&&high<len&&(s[low]==s[high])||(s[low]==(s[high]-32))||((s[low]-32)==s[high]))
{ 

if ((high-low+1)>maxlen)
{ 

maxlen=high-low+1;
start=low;
}
low--;
high++;
}
}
cout<<maxlen<<endl;
for(int t=a[start];t<=a[start+maxlen-1];t++)
cout<<str[t];//输出回文数组以及在原数组中其中间的字符
return 0;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/135012.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • android平台db4o使用示例

    android平台db4o使用示例db4o是一个纯对象的数据库,现支持java和.NET。07年的时候,db4objects宣布db4o已可以顺利运行于Android平台,当时db4objects公司和db4o的爱好者积极推进db4o运行于GoogleAndroid平台,以期待让db4o成为Android上的首选数据库平台,但令人遗憾的是google最后选择了sqlite作为作为android平台的数据库。但是没有关系,db4o

  • 对 flask 的 jsonify 方法的理解

    对 flask 的 jsonify 方法的理解flask下面有个jsonify函数,函数的作用就是返回一个JSON类型的Response(一般用于把数据返回给前端)要使用jsonify,首先你得要按下面一样引用一下:`fromflaskimportjsonify,render_template,redirect,request,url_for其实这个方法就是JSON方法的再封装,简化了一下几步操作:jsonify返回的…

  • 最全的大数据采集方法分类

    最全的大数据采集方法分类数据采集的设计,几乎完全取决于数据源的特性,毕竟数据源是整个大数据平台蓄水的上游,数据采集不过是获取水源的管道罢了。一、大数据环境下的数据处理需求大数据环境下数据来源非常丰富且数据类型多…

  • 前端_单页面开发_web前端框架

    前端_单页面开发_web前端框架   web移动端单页面开发,可适用于web端直接开发。本例需要使用require.js帮助实现。   单页面开发个人理解:对一个项目里面的所有html文件都拥有同一个url,通过hash值的改变来促发页面的跳转(hash为url后面的内容,如下面的#red和#green就是hash),如两个页面的url分别为(http://localhost:8000/views/index.htm…

    2022年10月13日
  • Python环境配置及项目建立

    Python环境配置及项目建立一、安装PythonPython比较稳定的两个版本是Python3.5和Python2.7,我用的是Python2.7,下载地址是:https://www.python.org/downloa

  • vue中splice_vue的computed用法

    vue中splice_vue的computed用法Vuesplice方法使用

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号