Проверьте, является ли строка палиндром
Возможный дубликат:
чтобы определить, является ли данная строка палиндром или не является палиндром
Мне нужно создать программу, которая позволяет пользователю вводить строку, и моя программа будет проверять, является ли введенная им строка палиндром (слово, которое можно читать так же, как и вперед).
Ответы
Ответ 1
Просто сравните строку с самим обратным:
string input;
cout << "Please enter a string: ";
cin >> input;
if (input == string(input.rbegin(), input.rend())) {
cout << input << " is a palindrome";
}
Этот конструктор string
принимает итератор начала и окончания и создает строку из символов между этими двумя итераторами. Поскольку rbegin()
- это конец строки, а приращение - назад, то строка, которую мы создаем, будет иметь символы input
, добавленные к ней в обратном порядке, обращая строку.
Затем вы просто сравниваете его с input
, и если они равны, это палиндром.
Это не учитывает капитализацию или пробелы, поэтому вам нужно будет улучшить ее самостоятельно.
Ответ 2
Обратите внимание, что обращение всей строки (либо с помощью rbegin()
диапазона rbegin()
/rend()
либо с помощью std::reverse
) и сравнение ее с входными rbegin()
приведет к ненужной работе.
Достаточно сравнить первую половину строки со второй, наоборот:
#include <string>
#include <algorithm>
#include <iostream>
int main()
{
std::string s;
std::cin >> s;
if( equal(s.begin(), s.begin() + s.size()/2, s.rbegin()) )
std::cout << "is a palindrome.\n";
else
std::cout << "is NOT a palindrome.\n";
}
демо: http://ideone.com/mq8qK
Ответ 3
bool IsPalindrome(const char* psz)
{
int i = 0;
int j;
if ((psz == NULL) || (psz[0] == '\0'))
{
return false;
}
j = strlen(psz) - 1;
while (i < j)
{
if (psz[i] != psz[j])
{
return false;
}
i++;
j--;
}
return true;
}
//Строковая версия STL:
bool IsPalindrome(const string& str)
{
if (str.empty())
return false;
int i = 0; // first characters
int j = str.length() - 1; // last character
while (i < j)
{
if (str[i] != str[j])
{
return false;
}
i++;
j--;
}
return true;
}
Ответ 4
Отмените строку и проверьте, являются ли исходные строки и обратные те же или нет.
Ответ 5
Я не парень из С++, но вы должны иметь возможность получить этот текст.
public static string Reverse(string s) {
if (s == null || s.Length < 2) {
return s;
}
int length = s.Length;
int loop = (length >> 1) + 1;
int j;
char[] chars = new char[length];
for (int i = 0; i < loop; i++) {
j = length - i - 1;
chars[i] = s[j];
chars[j] = s[i];
}
return new string(chars);
}