天天看点

待补遗(1)[C++]回文字符串

回文字符串:

正着写与反着写出的结果是同一个字符串

判断方法:

1.一字符串s,若s满足:s与s.reverse()是同一个字符串,则字符串是回文字符串

2.若字符串的第i(0 <= i && i < length)位与第length - i位是同一个字符,则该字符串是回文字符串

求字符串s最大回文字符串的C++程序:

/*
* 输出回文子串,并输出,若有长度相同的几个回文子串,
* 同时输出这几个回文子串
*
*/
#include<iostream>
#include<string>
using namespace std;

//判断是否是回文字符串
bool isPalindrome(const char *p, int len){
	for(int i=0;i < len;i++){
		if(p[i] != p[len-1-i])
			return false;
	}
	return true;
}
//输出回文子串
void prtPalindrome(const char *p, int len){
	for(int i=0;i < len;i++){
		cout<<*p++;
	}
	cout<<endl;
}


int main(){
	string s = "";
//	cin>>s;
	getline(cin, s, '\n');//接收带空格的字符串
	const char *p = s.c_str();
	//从长度为length的串开始查找回文子串
	bool isFound = false;
	for(unsigned int len=s.length();len > 0;len--){
		for(unsigned int j=0;j < s.length()-len+1;j++){
			if(isPalindrome(p+j, len)){
				prtPalindrome(p+j, len);
				isFound = true;
			}
		}
		if(isFound)
			break;
	}
return 0;
}
           

继续阅读