#include <iostream>
#include <string>
#include <regex>
bool isPalindrome(const std::string& s) {
// Use regex to remove non-alphanumeric characters
std::regex nonAlphaNum("[^a-zA-Z0-9]");
std::string cleaned = std::regex_replace(s, nonAlphaNum, "");
// Convert to lowercase
std::transform(cleaned.begin(), cleaned.end(), cleaned.begin(),
[](unsigned char c) { return std::tolower(c); });
std::cout << cleaned << std::endl;
// Check if the cleaned string is a palindrome
return std::equal(cleaned.begin(), cleaned.begin() + cleaned.size() / 2, cleaned.rbegin());
}
int main() {
std::string s = "+^-Ab#c!D 50...# 05*()dcB[]A##@!$";
std::cout << std::boolalpha << isPalindrome(s) << std::endl;
}
/*
run:
abcd5005dcba
true
*/