Loading [MathJax]/extensions/tex2jax.js
NOIP学习小站
西安交通大学附属中学航天学校

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

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

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#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;
}
#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; }
#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来解决问题参考代码如下:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#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;
}
#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; }
#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\) 来表示要判断相等字符对的下标:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#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;
}
#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; }
#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来解决问题参考代码如下:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#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;
}
#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; }
#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;
} 

登录

注册