Вопрос о логике c простой функции C ++ (is_palindrome) - PullRequest
1 голос
/ 21 февраля 2020

Предполагается, что приведенная ниже функция проверяет, является ли входной параметр палиндромом, и возвращает true / false.

Я знаю, что в коде есть ошибка, это должно быть: int i = text. size () - 1 ;

Вопрос: если я не добавлю «-1» и не выведу текст и textR, оба они будут «мадам» "и в моем понимании, когда я проверяю (text == textR), это должно быть правдой. Однако возвращается false.

Может кто-нибудь объяснить, что мне не хватает?

Я понимаю, что это как-то связано с string.size(), а содержимое строки не одно и то же, а индекс строки начинается с 0 ... Я до сих пор не до конца понимаю, почему текст! = TextR ,

#include <iostream>
#include <bits/stdc++.h> 

// Define is_palindrome() here:

bool is_palindrome(std::string text) {

  // create an empty string to store a reversed version of text 
  std::string textR;

// iterating backward over text and adding each character to textR
  for (int i = text.size(); i >= 0; i--) {
    textR.push_back(text[i]);
  }

std::cout << text << std::endl;
std::cout << textR << std::endl;

  // check if the reversed text is the same as text; return true or false

  if (text == textR) {
    return true;
  } else {
    return false;
  }
}

int main() {

  std::cout << is_palindrome("madam") << "\n";

}

Ответы [ 2 ]

5 голосов
/ 21 февраля 2020

text[text.size()] - это '\0' (ноль символа), который не может быть напечатан.

, поэтому TextR равно "\0madam" вместо ожидаемого "madam".

0 голосов
/ 21 февраля 2020

Ответ дан и принят. Хорошо.

Кроме того, я хотел бы дать ответ для более или менее стандартного решения для этой функции.

Это типичный один вкладыш:

#include <iostream>
#include <string>

bool is_palindrome(const std::string& s) { return s == std::string(s.crbegin(), s.crend()); };

int main()
{
    std::cout << "Is HannaH a palindrome?: " << is_palindrome("HannaH") << "\n";

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...