关键是回文序列的检测
1.看了看以前参照他人的写代码,发现并不能检测出前面是普通字符串,后面是较短的回文序列的情况。
2.纠正了对C++中的substr()的错误观念,substr(size_type _Off = 0,size_type _Count = npos)复制子字符串,第一个参数指定起始位置的下标,第二个参数表示子字符串的长度,不是终结字符的下标,
3.另外cstring只是为Visual C++中最常用的字符串类,继承自CSimpleStringT类,主要应用在MFC和ATL编程中,string才是C++标准库的实现
4.模块化,把检测回文序列的功能封装成函数用
废话有点多了,上代码
#include <iostream>
#include <string>
using namespace std;
bool isPalindrome(string str)
{
int index1 = 0;
int index2 = str.length() - 1;
while (index1<index2)
{
if (str[index1] != str[index2])
return false;
index1++;
index2--;
}
return true;
}
int main()
{
string rec;
int maxlength = 0;
while (cin>>rec)
{
for (int i = 0; i<rec.length(); i++)
{
//长度要不断缩短,这一步没有考虑到
int sublength = rec.length() - i;
for (int j = 1; j <= sublength; j++)
{
string sub = rec.substr(i, j);
if (isPalindrome(sub))
{
if (j >maxlength)
{
maxlength = j;
}
}
}
}
cout << maxlength << endl;
maxlength = 0;
}
}