⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex5_12.cpp

📁 提供了初学C++的源代码的例题
💻 CPP
字号:
//【例5.12】判断用户输入的字符串是否为回文。回文是指顺读和反读都一样的串,这里不分大小写,
//并滤去所有非字母字符,如:Madam,I'm Adam.和Golf,No Sir,prefer prison flog!都是回文。
#include<iostream>
#include<string>
#include<cctype>
using namespace std;

void swap(char&,char&);           //交换两个字符
string reverse(const string&);     //返回反转的字符串
string remove_punct(const string&,const string&);
  //将第一个字符串中所包含的与第二个字符串中相同的字符删去
string make_lower(const string&);  //所有大写改为小写
bool is_pal(const string&);        //判断是否回文

int main(){
	string str;
	cout<<"请输入需判断是否为回文的字符串,以回车结束。\n";
	getline(cin,str);
	if(is_pal(str)) cout<<str<<"是回文。\n";
	else  cout<<str<<"不是回文。\n";
	return 0;
}

void swap(char& ch1,char& ch2){
	char temp=ch1;
	ch1=ch2;
	ch2=temp;
}
string reverse(const string& s){
	int start=0,end=s.length();
	string temp(s);
	while(start<end){
		end--;
		swap(temp[start],temp[end]);
		start++;
	}
	return temp;
}
string remove_punct(const string& s,const string& punct){
	string no_punct;                     //放置处理后的字符串
	int i,s_length=s.length(),p_length=punct.length();
	for(i=0;i<s_length;i++){
		string a_ch=s.substr(i,1);       //单字符string
		int location=punct.find(a_ch,0); //从头查找a_ch在punct中出现的位置
		if(location<0||location>=p_length)
			no_punct=no_punct+a_ch;//punct中无a_ch,a_ch拷入新串
	}
	return  no_punct;
}
string make_lower(const string& s){
	string temp(s);
	int i,s_length=s.length();
	for(i=0;i<s_length;i++) temp[i]=tolower(s[i]);
	return temp;
}
bool is_pal(const string& s){
	string punct("!,;:.?'\" ");           //要滤除的非字母字符,包括空格符和常用标点符号
	string str(make_lower(s));
	str=remove_punct(str,punct);
	return str==reverse(str);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -