### 思路
1. 读入一行字符串。
2. 去除字符串中的空格和标点符号,并将其转换为小写。
3. 判断该字符串是否为回文串。
4. 如果是回文串,输出`Y`;否则,输出`N`。
### 伪代码
1. 读入字符串 `s`。
2. 初始化一个空字符串 `cleaned_s`。
3. 遍历 `s` 的每个字符 `c`:
- 如果 `c` 是字母或数字,将其转换为小写并添加到 `cleaned_s`。
4. 判断 `cleaned_s` 是否等于其反转字符串。
5. 如果相等,输出`Y`;否则,输出`N`。
### C++代码
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
bool isAlnum(char c) {
return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9');
}
char toLower(char c) {
if (c >= 'A' && c <= 'Z') {
return c + ('a' - 'A');
}
return c;
}
int main() {
string s, cleaned_s;
getline(cin, s);
// 去除空格和标点符号,并转换为小写
for (char c : s) {
if (isAlnum(c)) {
cleaned_s += toLower(c);
}
}
// 判断是否为回文串
string reversed_s = cleaned_s;
reverse(reversed_s.begin(), reversed_s.end());
if (cleaned_s == reversed_s) {
cout << "Y" << endl;
} else {
cout << "N" << endl;
}
return 0;
}