Comprueba si una cadena es palindrome

Posible duplicado:
para encontrar si una cadena dada es palíndromo o no es palíndromo

Necesito crear un progtwig que permita a un usuario ingresar una cadena y mi progtwig verificará si esa cadena que ingresaron es un palíndromo (palabra que puede leerse hacia atrás tanto como hacia adelante).

Simplemente compare la secuencia consigo misma invertida:

string input; cout << "Please enter a string: "; cin >> input; if (input == string(input.rbegin(), input.rend())) { cout << input << " is a palindrome"; } 

Este constructor de string toma un iterador de principio y final y crea la cadena a partir de los caracteres entre esos dos iteradores. Como rbegin() es el final de la cadena e incrementándola va hacia atrás a través de la cadena, la cadena que creamos tendrá los caracteres de input agregados a la inversa, invirtiendo la cadena.

Entonces simplemente lo compara con la input y si son iguales, es un palíndromo.

Esto no tiene en cuenta las mayúsculas o los espacios, por lo que tendrá que mejorarlo usted mismo.

Tenga en cuenta que la inversión de toda la cadena (ya sea con el constructor de rango rbegin() / rend() o con std::reverse ) y su comparación con la entrada realizaría un trabajo innecesario.

Es suficiente comparar la primera mitad de la cuerda con la segunda mitad, en reversa:

 #include  #include  #include  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"; } 

demo: http://ideone.com/mq8qK

 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; } 

// Versión de cadena 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; } 

Invierta la cuerda y verifique si la cuerda original y el reverso son iguales o no

No soy un chico de C ++, pero deberías ser capaz de entender la esencia de esto.

 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); }