NOIP学习小站
西安交通大学附属中学航天学校

字符串例题——判断回文字符串

问题:判断不包含空格且长度不超过1000的字符串是否是回文字符串。所谓回文字符串就是顺着念、倒着念完全相同的字符串。

分析:对于字符串\(str\),设其长度为\(n\),那么\(str\)是回文字符串必须要满足:str[0] == str[n-1]str[1] == str[n-2]……(str[i] == str[n-1-i])等条件。反之,如果找到任意一个不相等的字符对,那么肯定不是回文字符串。

#include<iostream>
#include<cstring>
using namespace std;
char str[1010];
int main()
{
	cin>>str;
	int n = strlen(str);
	int find = 0;           //标记是否找到不相等的字符对 
	for(int i=0;i<n;i++){   //循环条件可以修改为i<=n/2
		if(str[i] != str[n-1-i]){
			find = 1;
			break;
		}
	}
	if(find) cout<<"NO";
	else cout<<"YES";
	return 0;
} 

使用C++的string来解决问题参考代码如下:

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string str; 
	cin>>str;
	size_t n = str.length();
	int find = 0;           	//标记是否找到不相等的字符对 
	for(size_t i=0;i<n;i++){   	//循环条件可以修改为i<=n/2
		if(str[i] != str[n-1-i]){
			find = 1;
			break;
		}
	}
	if(find) cout<<"NO";
	else cout<<"YES";
	return 0;
} 

还可以用两个变量 \(i,j\) 来表示要判断相等字符对的下标:

#include<iostream>
#include<cstring>
using namespace std;
char str[1010];
int main()
{
	cin>>str;
	for(int i=0,j=strlen(str)-1;i<j;i++,j--){
		if(str[i] != str[j]){
			cout<<"NO";
			return 0;     //提前结束程序
		}
	}
	cout<<"YES";
	return 0;
} 

使用C++的string来解决问题参考代码如下:

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string str;
	cin>>str;
	for(size_t i=0,j=str.length()-1;i<j;i++,j--){
		if(str[i] != str[j]){
			cout<<"NO";
			return 0;     //提前结束程序
		}
	}
	cout<<"YES";
	return 0;
}