По заданию я должен разработать функцию, которая проверяет является ли строка палиндромом или нет. Строка может содержать пунктуацию и пробелы. Например: “Madam,I’m Adam”.По-сути я пытаюсь упростить данную строку до “madamimadam”.
Вот мой код:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
bool isPal(const string &);
int main()
{
string input;
cout << "Enter a string to check if this is a palindrome: ";
getline(cin, input);
if (isPal(input))
cout << "Yes, this is the palindrome." << endl;
else
cout << "No, it's not." << endl;
return 0;
}
bool isPal(const string & st)
{
string temp = st;
temp.erase(remove_if(temp.begin(), temp.end(), isspace), temp.end());
temp.erase(remove_if(temp.begin(), temp.end(), ispunct), temp.end());
if ( temp == string(temp.rbegin(), temp.rend()))
return true;
else
return false;
}
Простые слова типа otto функция выдает правильно, но с более сложными строками не получается. Подскажите, пожалуйста, что не так.
Не хотите что-то вроде такого?
bool isPal(const string & st)
{
for(auto b = st.begin(), e = st.end()-1; b < e; ++b, --e)
{
while(!isalnum(*b)) ++b;
while(!isalnum(*e)) --e;
if (toupper(*b) != toupper(*e)) return false;
}
return true;
}
Имеет смысл добавить защиту от дурака - пустые строки, только из пунктуаций и т.п.
Да, для VC++ 2010 замените auto
на string::const_iterator
.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Имеется 2 MouseArea, когда я делаю drag для одной, я не могу одновременно делать drag и для другой, хотя они никак не связаны друг с другом, даже не на одном...
Проблема в том, что нужно клонировать svg элемент и добавить его в другом местеИспользую jquery clone(), но вместо элемента я получаю в html [Object, Object]