Mother bear [UVA10945]

发布时间 2023-11-22 20:35:57作者: hrk666

蒟蒻的首篇题解——Mother bear


题目大意:一只笨熊只可以理解回文的句子,要你判断句子去掉标点符号、空格后是否回文。

思路:

1、利用 getline() 读入整行字符串,并且处理成只有小写/大写字母和数字的字符串。(样例处理结果对照详见①~②分割线内)

2、读取到一半必定会出现倒着的(针对于前面的倒着的)字符串,如果没有就不是回文的。(此处应该按照修改后的总长度奇偶区别,本蒟蒻只能想到这种笨方法)

------------①分割线------------

初始:Madam, Im adam!

修改:madamImadam (回文)

初始:Roma tibi subito motibus ibit amor.

修改:romatibisubitomotibusibitamor (回文)

初始:Me so hungry!

修改:mesohungry

初始:Si nummi immunis

修改:sinummiimmunis (回文)

------------②分割线(AC代码)------------

#include<bits/stdc++.h>
using namespace std;
bool huiwenpd(string A) {//判断回文
	for (int i = 0; i <= A.size() / 2; i++) {
		if (A[i] != A[A.size() - i - 1]) {
			return 0;
		}
	}
	return 1;
}
string a, b; //a为处理前的字符串,b为修改好的字符串
int main() {
	while (1) {
		b = ""; //b最开始为空串
		getline(cin, a); //带空格读入一行
		if(a=="DONE"){
			return 0;
		}
		for (int i = 0; i < a.size(); i++) {
			if ((a[i] >= 'a' && a[i] <= 'z') || a[i] >= '0' && a[i] <= '9') {//小写/数字直接加入加入修改字符串
				b += a[i]; //加入修改字符串
			} else if (a[i] >= 'A' && a[i] <= 'Z') { //大写转小写后加入修改字符串
				b += (a[i] + 32);
			}
		}
		if(huiwenpd(b)==1){//回文
			cout<<"You won't be eaten!"<<endl;
		}else{//不是回文
			cout<<"Uh oh.."<<endl;
		}
	}
	return 0;
}